diff --git a/nunjucks/src/lib.js b/nunjucks/src/lib.js index fbea5008..b63e2d04 100644 --- a/nunjucks/src/lib.js +++ b/nunjucks/src/lib.js @@ -87,7 +87,7 @@ function TemplateError(message, lineno, colno) { } Object.defineProperty(err, 'stack', { - get: () => getStack.call(this), + get: () => getStack.call(err), }); Object.defineProperty(err, 'cause', { @@ -98,7 +98,7 @@ function TemplateError(message, lineno, colno) { err.colno = colno; err.firstUpdate = true; - err.Update = (path) => { + err.Update = function Update(path) { let msg = '(' + (path || 'unknown path') + ')'; // only show lineno + colno next to path of template diff --git a/tests/compiler.js b/tests/compiler.js index 81a71a82..4c3fbaa8 100644 --- a/tests/compiler.js +++ b/tests/compiler.js @@ -4,6 +4,8 @@ var expect; var util; var Template; + var Loader; + var Environment; var fs; var render; var equal; @@ -14,17 +16,20 @@ expect = require('expect.js'); util = require('./util'); Template = require('../nunjucks/src/environment').Template; + Environment = require('../nunjucks/src/environment').Environment; fs = require('fs'); } else { expect = window.expect; util = window.util; Template = nunjucks.Template; + Environment = nunjucks.Environment; } render = util.render; equal = util.equal; finish = util.finish; isSlim = util.isSlim; + Loader = util.Loader; describe('compiler', function() { it('should compile templates', function(done) { @@ -784,6 +789,28 @@ finish(done); }); + if (!isSlim) { + it('should include error line in raised TemplateError', function(done) { + var tmplStr = [ + '{% set items = ["a", "b",, "c"] %}', + '{{ items | join(",") }}', + ].join('\n'); + + var loader = new Loader('tests/templates'); + var env = new Environment(loader); + var tmpl = new Template(tmplStr, env, 'parse-error.njk'); + + tmpl.render({}, function(err, res) { + expect(res).to.be(undefined); + expect(err.toString()).to.be([ + 'Template render error: (parse-error.njk) [Line 1, Column 24]', + ' unexpected token: ,', + ].join('\n')); + done(); + }); + }); + } + it('should compile string concatenations with tilde', function(done) { equal('{{ 4 ~ \'hello\' }}', '4hello'); equal('{{ 4 ~ 5 }}', '45'); diff --git a/tests/util.js b/tests/util.js index 52afb39b..b69ab285 100644 --- a/tests/util.js +++ b/tests/util.js @@ -209,6 +209,7 @@ module.exports.finish = finish; module.exports.normEOL = normEOL; module.exports.isSlim = isSlim; + module.exports.Loader = Loader; } else { window.util = { render: render, @@ -216,7 +217,8 @@ jinjaEqual: jinjaEqual, finish: finish, normEOL: normEOL, - isSlim: isSlim + isSlim: isSlim, + Loader: Loader, }; } }());