From 77ddfca271331fb2f7e924998d376eb09f546e25 Mon Sep 17 00:00:00 2001 From: Nikolay Kostyurin Date: Tue, 12 Jun 2018 18:07:13 +0200 Subject: [PATCH] add parser tests --- packages/bbob-parser/Parser.js | 2 +- packages/bbob-parser/Parser.test.js | 30 +++++++++++++++++++++++--- packages/bbob-parser/Tokenizer.test.js | 14 ++++++------ packages/bbob-parser/token.js | 22 +++++++++---------- 4 files changed, 47 insertions(+), 21 deletions(-) diff --git a/packages/bbob-parser/Parser.js b/packages/bbob-parser/Parser.js index e716aa7..e30d497 100644 --- a/packages/bbob-parser/Parser.js +++ b/packages/bbob-parser/Parser.js @@ -17,7 +17,7 @@ const Tokenizer = require('./Tokenizer'); const TokenChar = Tokenizer.CHAR; const getChar = Tokenizer.getChar; -const createTagNode = (name, attrs = {}, content = []) => ({ tag: name, attrs, content }); +const createTagNode = (tag, attrs = {}, content = []) => ({ tag, attrs, content }); /** * diff --git a/packages/bbob-parser/Parser.test.js b/packages/bbob-parser/Parser.test.js index e006f1e..c703935 100644 --- a/packages/bbob-parser/Parser.test.js +++ b/packages/bbob-parser/Parser.test.js @@ -1,11 +1,35 @@ const Parser = require('./Parser'); const TOKEN = require('./token'); +const parse = input => (new Parser(input).parse()); + describe('Parser', () => { test('parse paired tags tokens', () => { - const parser = new Parser([ - [TOKEN.TYPE_TAG, 'ch'], - [TOKEN.TYPE_TAG, '/ch'], + const input = [ + [TOKEN.TYPE_TAG, 'best'], + [TOKEN.TYPE_ATTR_NAME, 'name'], + [TOKEN.TYPE_ATTR_VALUE, 'value'], + [TOKEN.TYPE_WORD, 'Foo'], + [TOKEN.TYPE_SPACE, ' '], + [TOKEN.TYPE_WORD, 'Bar'], + [TOKEN.TYPE_TAG, '/best'], + ]; + + const ast = parse(input); + + expect(ast).toBeInstanceOf(Array); + expect(ast).toEqual([ + { + tag: 'best', + attrs: { + name: 'value', + }, + content: [ + 'Foo', + ' ', + 'Bar', + ], + }, ]); }); }); diff --git a/packages/bbob-parser/Tokenizer.test.js b/packages/bbob-parser/Tokenizer.test.js index f87e06c..3b944c2 100644 --- a/packages/bbob-parser/Tokenizer.test.js +++ b/packages/bbob-parser/Tokenizer.test.js @@ -2,10 +2,12 @@ const Tokenizer = require('./Tokenizer'); const TYPE = Tokenizer.TYPE; +const tokenize = input => (new Tokenizer(input).tokenize()); + describe('Tokenizer', () => { test('tokenize single tag', () => { const input = '[SingleTag]'; - const tokens = new Tokenizer(input).tokenize(); + const tokens = tokenize(input); expect(tokens).toBeInstanceOf(Array); expect(tokens).toEqual([ @@ -15,7 +17,7 @@ describe('Tokenizer', () => { test('tokenize single tag with spaces', () => { const input = '[Single Tag]'; - const tokens = new Tokenizer(input).tokenize(); + const tokens = tokenize(input); expect(tokens).toBeInstanceOf(Array); expect(tokens).toEqual([ @@ -25,7 +27,7 @@ describe('Tokenizer', () => { test('tokenize tag as param', () => { const input = '[color="#ff0000"]Text[/color]'; - const tokens = new Tokenizer(input).tokenize(); + const tokens = tokenize(input); expect(tokens).toBeInstanceOf(Array); expect(tokens).toEqual([ @@ -38,7 +40,7 @@ describe('Tokenizer', () => { test('tokenize tag param without quotemarks', () => { const input = '[style color=#ff0000]Text[/style]'; - const tokens = new Tokenizer(input).tokenize(); + const tokens = tokenize(input); expect(tokens).toBeInstanceOf(Array); expect(tokens).toEqual([ @@ -57,7 +59,7 @@ describe('Tokenizer', () => { [*] Item 3. [/list]`; - const tokens = new Tokenizer(input).tokenize(); + const tokens = tokenize(input); expect(tokens).toBeInstanceOf(Array); expect(tokens).toEqual([ @@ -136,7 +138,7 @@ describe('Tokenizer', () => { ]; inputs.forEach((input, idx) => { - const tokens = new Tokenizer(input).tokenize(); + const tokens = tokenize(input); expect(tokens).toBeInstanceOf(Array); expect(tokens).toEqual(asserts[idx]); diff --git a/packages/bbob-parser/token.js b/packages/bbob-parser/token.js index 018b5e8..011f614 100644 --- a/packages/bbob-parser/token.js +++ b/packages/bbob-parser/token.js @@ -11,14 +11,14 @@ const TOKEN_TYPE_SPACE = 'space'; const TOKEN_TYPE_NEW_LINE = 'new-line'; module.exports = { - TYPE_ID: TOKEN_TYPE_ID, - VALUE_ID: TOKEN_VALUE_ID, - LINE_ID: TOKEN_LINE_ID, - COLUMN_ID: TOKEN_COLUMN_ID, - TYPE_WORD: TOKEN_TYPE_WORD, - TYPE_TAG: TOKEN_TYPE_TAG, - TYPE_ATTR_NAME: TOKEN_TYPE_ATTR_NAME, - TYPE_ATTR_VALUE: TOKEN_TYPE_ATTR_VALUE, - TYPE_SPACE: TOKEN_TYPE_SPACE, - TYPE_NEW_LINE: TOKEN_TYPE_NEW_LINE -}; \ No newline at end of file + TYPE_ID: TOKEN_TYPE_ID, + VALUE_ID: TOKEN_VALUE_ID, + LINE_ID: TOKEN_LINE_ID, + COLUMN_ID: TOKEN_COLUMN_ID, + TYPE_WORD: TOKEN_TYPE_WORD, + TYPE_TAG: TOKEN_TYPE_TAG, + TYPE_ATTR_NAME: TOKEN_TYPE_ATTR_NAME, + TYPE_ATTR_VALUE: TOKEN_TYPE_ATTR_VALUE, + TYPE_SPACE: TOKEN_TYPE_SPACE, + TYPE_NEW_LINE: TOKEN_TYPE_NEW_LINE +};