var fs = require('fs'); var assert = require('assert'); var pug = require('../'); var uglify = require('uglify-js'); var mkdirp = require('mkdirp').sync; var filters = { custom: function(str, options) { assert(options.opt === 'val'); assert(options.num === 2); return 'BEGIN' + str + 'END'; }, }; // test cases function writeFileSync(filename, data) { try { if (fs.readFileSync(filename, 'utf8') === data.toString('utf8')) { return; } } catch (ex) { if (ex.code !== 'ENOENT') { throw ex; } } fs.writeFileSync(filename, data); } function findCases(dir) { return fs .readdirSync(dir) .filter(function(file) { return ~file.indexOf('.pug'); }) .map(function(file) { return file.replace('.pug', ''); }); } function testSingle(it, suffix, test) { var name = test.replace(/[-.]/g, ' '); it(name, function() { var path = __dirname + '/cases' + suffix + '/' + test + '.pug'; var str = fs.readFileSync(path, 'utf8'); var fn = pug.compile(str, { filename: path, pretty: true, basedir: __dirname + '/cases' + suffix, filters: filters, filterAliases: {markdown: 'markdown-it'}, }); var actual = fn({title: 'Pug'}); writeFileSync( __dirname + '/output' + suffix + '/' + test + '.html', actual ); var html = fs .readFileSync( __dirname + '/cases' + suffix + '/' + test + '.html', 'utf8' ) .trim() .replace(/\r/g, ''); var clientCode = uglify.minify( pug.compileClient(str, { filename: path, pretty: true, compileDebug: false, basedir: __dirname + '/cases' + suffix, filters: filters, filterAliases: {markdown: 'markdown-it'}, }), { output: {beautify: true}, mangle: false, compress: false, fromString: true, } ).code; var clientCodeDebug = uglify.minify( pug.compileClient(str, { filename: path, pretty: true, compileDebug: true, basedir: __dirname + '/cases' + suffix, filters: filters, filterAliases: {markdown: 'markdown-it'}, }), { output: {beautify: true}, mangle: false, compress: false, fromString: true, } ).code; writeFileSync( __dirname + '/output' + suffix + '/' + test + '.js', uglify.minify( pug.compileClient(str, { filename: path, pretty: false, compileDebug: false, basedir: __dirname + '/cases' + suffix, filters: filters, filterAliases: {markdown: 'markdown-it'}, }), { output: {beautify: true}, mangle: false, compress: false, fromString: true, } ).code ); if (/filter/.test(test)) { actual = actual.replace(/\n| /g, ''); html = html.replace(/\n| /g, ''); } if (/mixins-unused/.test(test)) { assert( /never-called/.test(str), 'never-called is in the pug file for mixins-unused' ); assert( !/never-called/.test(clientCode), 'never-called should be removed from the code' ); } expect(actual.trim()).toEqual(html); actual = Function('pug', clientCode + '\nreturn template;')()({ title: 'Pug', }); if (/filter/.test(test)) { actual = actual.replace(/\n| /g, ''); } expect(actual.trim()).toEqual(html); actual = Function('pug', clientCodeDebug + '\nreturn template;')()({ title: 'Pug', }); if (/filter/.test(test)) { actual = actual.replace(/\n| /g, ''); } expect(actual.trim()).toEqual(html); }); } module.exports = { filters, findCases, testSingle, };