diff --git a/test/block.ts b/test/block.ts
new file mode 100644
index 0000000000000000000000000000000000000000..72e8319a4c7903c294fb6b7cfd79708a33e6efc4
--- /dev/null
+++ b/test/block.ts
@@ -0,0 +1,71 @@
+import assert from 'assert';
+import { parse, parsePlain } from '../built/index';
+import { createNode } from '../built/mfm-node';
+import {
+	TEXT, EMOJI
+} from './node';
+
+describe('search', () => {
+	describe('basic', () => {
+		it('Search', () => {
+			const input = 'MFM 書き方 123 Search';
+			const output = [
+				createNode('search', {
+					query: 'MFM 書き方 123',
+					content: input
+				})
+			];
+			assert.deepStrictEqual(parse(input), output);
+		});
+		it('[Search]', () => {
+			const input = 'MFM 書き方 123 [Search]';
+			const output = [
+				createNode('search', {
+					query: 'MFM 書き方 123',
+					content: input
+				})
+			];
+			assert.deepStrictEqual(parse(input), output);
+		});
+		it('search', () => {
+			const input = 'MFM 書き方 123 search';
+			const output = [
+				createNode('search', {
+					query: 'MFM 書き方 123',
+					content: input
+				})
+			];
+			assert.deepStrictEqual(parse(input), output);
+		});
+		it('[search]', () => {
+			const input = 'MFM 書き方 123 [search]';
+			const output = [
+				createNode('search', {
+					query: 'MFM 書き方 123',
+					content: input
+				})
+			];
+			assert.deepStrictEqual(parse(input), output);
+		});
+		it('検索', () => {
+			const input = 'MFM 書き方 123 検索';
+			const output = [
+				createNode('search', {
+					query: 'MFM 書き方 123',
+					content: input
+				})
+			];
+			assert.deepStrictEqual(parse(input), output);
+		});
+		it('[検索]', () => {
+			const input = 'MFM 書き方 123 [検索]';
+			const output = [
+				createNode('search', {
+					query: 'MFM 書き方 123',
+					content: input
+				})
+			];
+			assert.deepStrictEqual(parse(input), output);
+		});
+	});
+});
diff --git a/test/inline.ts b/test/inline.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3351a4ab47e7aa8a23bc70f537fd7a4692273380
--- /dev/null
+++ b/test/inline.ts
@@ -0,0 +1,37 @@
+import assert from 'assert';
+import { parse, parsePlain } from '../built/index';
+import { createNode } from '../built/mfm-node';
+import {
+	TEXT, EMOJI, UNI_EMOJI, HASHTAG
+} from './node';
+
+describe('text', () => {
+	it('basic', () => {
+		const input = 'abc';
+		const output = [TEXT('abc')];
+		assert.deepStrictEqual(parse(input), output);
+	});
+});
+describe('custom emoji', () => {
+	it('basic', () => {
+		const input = ':abc:';
+		const output = [EMOJI('abc')];
+		assert.deepStrictEqual(parse(input), output);
+	});
+});
+
+describe('unicode emoji', () => {
+	it('basic', () => {
+		const input = '今起きた😇';
+		const output = [TEXT('今起きた'), UNI_EMOJI('😇')];
+		assert.deepStrictEqual(parse(input), output);
+	});
+});
+
+describe('hashtag', () => {
+	it('and unicode emoji', () => {
+		const input = '#️⃣abc123#abc';
+		const output = [UNI_EMOJI('#️⃣'), TEXT('abc123'), HASHTAG('abc')];
+		assert.deepStrictEqual(parse(input), output);
+	});
+});
diff --git a/test/node.ts b/test/node.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2b66e34143894efc762e81bfaeda3ae934d733c6
--- /dev/null
+++ b/test/node.ts
@@ -0,0 +1,6 @@
+import { createNode } from '../built/mfm-node';
+
+export const TEXT = (value: string) => createNode('text', { text: value });
+export const EMOJI = (name: string) => createNode('emoji', { name: name });
+export const UNI_EMOJI = (value: string) => createNode('emoji', { emoji: value });
+export const HASHTAG = (value: string) => createNode('hashtag', { hashtag: value });