diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/ast.js | 2 | ||||
-rw-r--r-- | spec/compiler.js | 4 | ||||
-rw-r--r-- | spec/parser.js | 10 | ||||
-rw-r--r-- | spec/tokenizer.js | 14 |
4 files changed, 26 insertions, 4 deletions
diff --git a/spec/ast.js b/spec/ast.js index 9b3edb0..ef2ef68 100644 --- a/spec/ast.js +++ b/spec/ast.js @@ -192,7 +192,7 @@ describe('ast', function() { describe('ProgramNode', function(){ it('storing location info', function(){ - var pn = new handlebarsEnv.AST.ProgramNode([], {}, LOCATION_INFO); + var pn = new handlebarsEnv.AST.ProgramNode([], null, {}, LOCATION_INFO); testLocationInfoStorage(pn); }); }); diff --git a/spec/compiler.js b/spec/compiler.js index 250dbc7..eead00b 100644 --- a/spec/compiler.js +++ b/spec/compiler.js @@ -41,7 +41,7 @@ describe('compiler', function() { }); it('can utilize AST instance', function() { - equal(Handlebars.compile(new Handlebars.AST.ProgramNode([ new Handlebars.AST.ContentNode("Hello")], {}))(), 'Hello'); + equal(Handlebars.compile(new Handlebars.AST.ProgramNode([ new Handlebars.AST.ContentNode("Hello")], null, {}))(), 'Hello'); }); it("can pass through an empty string", function() { @@ -60,7 +60,7 @@ describe('compiler', function() { }); it('can utilize AST instance', function() { - equal(/return "Hello"/.test(Handlebars.precompile(new Handlebars.AST.ProgramNode([ new Handlebars.AST.ContentNode("Hello")]), {})), true); + equal(/return "Hello"/.test(Handlebars.precompile(new Handlebars.AST.ProgramNode([ new Handlebars.AST.ContentNode("Hello")]), null, {})), true); }); it("can pass through an empty string", function() { diff --git a/spec/parser.js b/spec/parser.js index f587365..0569229 100644 --- a/spec/parser.js +++ b/spec/parser.js @@ -157,6 +157,14 @@ describe('parser', function() { }, Error); }); + it('parses block with block params', function() { + equals(ast_for("{{#foo as |bar baz|}}content{{/foo}}"), "BLOCK:\n ID:foo []\n PROGRAM:\n BLOCK PARAMS: [ bar baz ]\n CONTENT[ 'content' ]\n"); + }); + + it('parses inverse block with block params', function() { + equals(ast_for("{{^foo as |bar baz|}}content{{/foo}}"), "BLOCK:\n ID:foo []\n {{^}}\n BLOCK PARAMS: [ bar baz ]\n CONTENT[ 'content' ]\n"); + }); + it("raises if there's a Parse error", function() { shouldThrow(function() { ast_for("foo{{^}}bar"); @@ -193,7 +201,7 @@ describe('parser', function() { describe('externally compiled AST', function() { it('can pass through an already-compiled AST', function() { - equals(ast_for(new Handlebars.AST.ProgramNode([ new Handlebars.AST.ContentNode("Hello")])), "CONTENT[ \'Hello\' ]\n"); + equals(ast_for(new Handlebars.AST.ProgramNode([new Handlebars.AST.ContentNode("Hello")], null)), "CONTENT[ \'Hello\' ]\n"); }); }); }); diff --git a/spec/tokenizer.js b/spec/tokenizer.js index 6f5cc38..93ed97c 100644 --- a/spec/tokenizer.js +++ b/spec/tokenizer.js @@ -399,4 +399,18 @@ describe('Tokenizer', function() { var result = tokenize("{{foo (bar (lol true) false) (baz 1) (blah 'b') (blorg \"c\")}}"); shouldMatchTokens(result, ['OPEN', 'ID', 'OPEN_SEXPR', 'ID', 'OPEN_SEXPR', 'ID', 'BOOLEAN', 'CLOSE_SEXPR', 'BOOLEAN', 'CLOSE_SEXPR', 'OPEN_SEXPR', 'ID', 'NUMBER', 'CLOSE_SEXPR', 'OPEN_SEXPR', 'ID', 'STRING', 'CLOSE_SEXPR', 'OPEN_SEXPR', 'ID', 'STRING', 'CLOSE_SEXPR', 'CLOSE']); }); + + it('tokenizes block params', function() { + var result = tokenize("{{#foo as |bar|}}"); + shouldMatchTokens(result, ['OPEN_BLOCK', 'ID', 'OPEN_BLOCK_PARAMS', 'ID', 'CLOSE_BLOCK_PARAMS', 'CLOSE']); + + var result = tokenize("{{#foo as |bar baz|}}"); + shouldMatchTokens(result, ['OPEN_BLOCK', 'ID', 'OPEN_BLOCK_PARAMS', 'ID', 'ID', 'CLOSE_BLOCK_PARAMS', 'CLOSE']); + + var result = tokenize("{{#foo as | bar baz |}}"); + shouldMatchTokens(result, ['OPEN_BLOCK', 'ID', 'OPEN_BLOCK_PARAMS', 'ID', 'ID', 'CLOSE_BLOCK_PARAMS', 'CLOSE']); + + var result = tokenize("{{#foo as as | bar baz |}}"); + shouldMatchTokens(result, ['OPEN_BLOCK', 'ID', 'ID', 'OPEN_BLOCK_PARAMS', 'ID', 'ID', 'CLOSE_BLOCK_PARAMS', 'CLOSE']); + }); }); |