const test = require('tape') const Compiler = require('../src/compiler') const Lexer = require('../src/lexer') const Parser = require('../src/parser') const tt = require('../src/tokenTypes') test('compiles a simple template', t => { t.plan(1) const lexer = new Lexer() const tokenStream = lexer.scan(` (div :class "foobar" (p :class "bazquux" "Lorem ipsum dolor sit amet.")) `) const parser = new Parser(tokenStream) const tree = parser.parse() const compiler = new Compiler(tree) const result = compiler.compile() t.deepEqual( result.replace(/\n/g, '').replace(/ +/g, ''), '

Lorem ipsum dolor sit amet.

', ) }) test('renders variables according to passed-in context', t => { t.plan(1) const lexer = new Lexer() const tokenStream = lexer.scan(` (div :class classOne (p :class classTwo bodyText)) `) const parser = new Parser(tokenStream) const tree = parser.parse() const compiler = new Compiler(tree, { classOne: 'foobar', classTwo: 'bazquux', bodyText: 'Lorem ipsum dolor sit amet.', }) const result = compiler.compile() t.deepEqual( result.replace(/\n/g, '').replace(/ +/g, ''), '

Lorem ipsum dolor sit amet.

', ) }) test('self closing tags are respected', function(t) { t.plan(1) const lexer = new Lexer() const tokenStream = lexer.scan(` (meta :charset "UTF-8") (img :src "test.png") `) const parser = new Parser(tokenStream) const tree = parser.parse() const compiler = new Compiler(tree) const result = compiler.compile() t.deepEqual( result.replace(/\n/g, '').replace(/ +/g, ''), '', ) })