123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- const test = require('tape')
-
- const Lexer = require('../src/lexer')
- const Node = require('../src/node')
- const Parser = require('../src/parser')
- const tt = require('../src/tokenTypes')
-
- test('parses token stream into a tree', t => {
- t.plan(1)
- const lexer = new Lexer()
- let tokenStream = lexer.scan(`
- (div :class "foobar"
- (p :class "bazquux"))
- `)
- let parser = new Parser(tokenStream)
- let tree = parser.parse()
-
- t.deepEqual(tree, [
- new Node({
- type: 'functionCall',
- functionName: 'div',
- args: [
- new Node({
- attributeName: 'class',
- attributeValue: new Node({ type: 'string', content: 'foobar' }),
- }),
- ],
- subtree: [
- new Node({
- type: 'functionCall',
- functionName: 'p',
- args: [
- new Node({
- attributeName: 'class',
- attributeValue: new Node({ type: 'string', content: 'bazquux' }),
- }),
- ],
- subtree: [],
- }),
- ],
- }),
- ])
- })
-
- test('missing close paren returns an error', function(t) {
- t.plan(2)
- const lexer = new Lexer()
- let tokenStream = lexer.scan(`
- (div :class "foobar"
- `)
- let parser = new Parser(tokenStream)
- let tree = parser.parse()
- t.equal(tree.error.constructor.name, 'Error')
- t.deepEqual(tree.error, {
- file: undefined,
- line: 3,
- message: 'Encountered an unexpected EOF while looking for a ).',
- })
- })
-
- test('unexpected attribute return an error', function(t) {
- t.plan(2)
- const lexer = new Lexer()
- let tokenStream = lexer.scan(`
- (div :class :id)
- `)
- let parser = new Parser(tokenStream)
- let tree = parser.parse()
- t.equal(tree.error.constructor.name, 'Error')
- t.deepEqual(tree.error, {
- file: undefined,
- line: 2,
- message: 'Encountered an unexpected attribute while looking for a string or identifier.',
- })
- })
|