diff --git a/spec/helpers.js b/spec/helpers.js index 15bc2f121..0e756aba3 100644 --- a/spec/helpers.js +++ b/spec/helpers.js @@ -28,14 +28,35 @@ describe('helpers', function() { 'raw block helper gets raw content'); }); - it('helper for nested raw block gets raw content', function() { - var string = '{{{{a}}}} {{{{b}}}} {{{{/b}}}} {{{{/a}}}}'; - var helpers = { - a: function(options) { + describe('raw block parsing (with identity helper-function)', function() { + + function runWithIdentityHelper(template, expected) { + var helpers = { + identity: function(options) { return options.fn(); - } - }; - shouldCompileTo(string, [{}, helpers], ' {{{{b}}}} {{{{/b}}}} ', 'raw block helper should get nested raw block as raw content'); + } + }; + shouldCompileTo(template, [{}, helpers], expected); + } + + it('helper for nested raw block gets raw content', function() { + runWithIdentityHelper('{{{{identity}}}} {{{{b}}}} {{{{/b}}}} {{{{/identity}}}}', ' {{{{b}}}} {{{{/b}}}} '); + }); + + it('helper for nested raw block works with empty content', function() { + runWithIdentityHelper('{{{{identity}}}}{{{{/identity}}}}', ''); + }); + + it('helper for nested raw block works if nested raw blocks are broken', function() { + runWithIdentityHelper('{{{{identity}}}} {{{{a}}}} {{{{ {{{{/ }}}} }}}} {{{{/identity}}}}', ' {{{{a}}}} {{{{ {{{{/ }}}} }}}} '); + }); + + it('helper for nested raw block throw exception when with missing closing braces', function() { + var string = '{{{{a}}}} {{{{/a'; + shouldThrow(function() { + Handlebars.compile(string)(); + }); + }); }); it('helper block with identical context', function() { diff --git a/src/handlebars.l b/src/handlebars.l index 90acffec0..2b27a9fab 100644 --- a/src/handlebars.l +++ b/src/handlebars.l @@ -63,7 +63,7 @@ ID [^\s!"#%-,\.\/;->@\[-\^`\{-~]+/{LOOKAHEAD} return 'END_RAW_BLOCK'; } } -[^\x00]*?/("{{{{") { return 'CONTENT'; } +[^\x00]+/("{{{{") { return 'CONTENT'; } [\s\S]*?"--"{RIGHT_STRIP}?"}}" { this.popState(); diff --git a/src/handlebars.yy b/src/handlebars.yy index ce0649838..cab04c61a 100644 --- a/src/handlebars.yy +++ b/src/handlebars.yy @@ -39,7 +39,7 @@ content }; rawBlock - : openRawBlock content+ END_RAW_BLOCK -> yy.prepareRawBlock($1, $2, $3, @$) + : openRawBlock content* END_RAW_BLOCK -> yy.prepareRawBlock($1, $2, $3, @$) ; openRawBlock