const assert = require('assert'); const fs = require('fs'); const runUtils = require('./run-utils'); const pug = require('../'); const anti = runUtils.findCases(__dirname + '/anti-cases'); describe('certain syntax is not allowed and will throw a compile time error', function () { anti.forEach(function(test){ var name = test.replace(/[-.]/g, ' '); it(name, function(){ var path = __dirname.replace(/\\/g, '/') + '/anti-cases/' + test + '.pug'; var str = fs.readFileSync(path, 'utf8'); try { var fn = pug.compile(str, { filename: path, pretty: true, basedir: __dirname + '/anti-cases', filters: runUtils.filters }); } catch (ex) { if (!ex.code) { throw ex; } assert(ex instanceof Error, 'Should throw a real Error'); assert(ex.code.indexOf('PUG:') === 0, 'It should have a code of "PUG:SOMETHING"'); assert(ex.message.replace(/\\/g, '/').indexOf(path) === 0, 'it should start with the path'); assert(/:\d+$/m.test(ex.message.replace(/\\/g, '/')), 'it should include a line number.'); return; } throw new Error(test + ' should have thrown an error'); }) }); });