run-utils.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. var fs = require('fs');
  2. var assert = require('assert');
  3. var pug = require('../');
  4. var uglify = require('uglify-js');
  5. var mkdirp = require('mkdirp').sync;
  6. var filters = {
  7. custom: function (str, options) {
  8. assert(options.opt === 'val');
  9. assert(options.num === 2);
  10. return 'BEGIN' + str + 'END';
  11. }
  12. };
  13. // test cases
  14. function writeFileSync(filename, data) {
  15. try {
  16. if (fs.readFileSync(filename, 'utf8') === data.toString('utf8')) {
  17. return;
  18. }
  19. } catch (ex) {
  20. if (ex.code !== 'ENOENT') {
  21. throw ex;
  22. }
  23. }
  24. fs.writeFileSync(filename, data);
  25. }
  26. function findCases(dir) {
  27. return fs.readdirSync(dir).filter(function(file){
  28. return ~file.indexOf('.pug');
  29. }).map(function(file){
  30. return file.replace('.pug', '');
  31. });
  32. }
  33. function testSingle(it, suffix, test){
  34. var name = test.replace(/[-.]/g, ' ');
  35. it(name, function(){
  36. var path = __dirname + '/cases' + suffix + '/' + test + '.pug';
  37. var str = fs.readFileSync(path, 'utf8');
  38. var fn = pug.compile(str, {
  39. filename: path,
  40. pretty: true,
  41. basedir: __dirname + '/cases' + suffix,
  42. filters: filters,
  43. filterAliases: {'markdown': 'markdown-it'},
  44. });
  45. var actual = fn({ title: 'Pug' });
  46. writeFileSync(__dirname + '/output' + suffix + '/' + test + '.html', actual);
  47. var html = fs.readFileSync(__dirname + '/cases' + suffix + '/' + test + '.html', 'utf8').trim().replace(/\r/g, '');
  48. var clientCode = uglify.minify(pug.compileClient(str, {
  49. filename: path,
  50. pretty: true,
  51. compileDebug: false,
  52. basedir: __dirname + '/cases' + suffix,
  53. filters: filters,
  54. filterAliases: {'markdown': 'markdown-it'},
  55. }), {output: {beautify: true}, mangle: false, compress: false, fromString: true}).code;
  56. var clientCodeDebug = uglify.minify(pug.compileClient(str, {
  57. filename: path,
  58. pretty: true,
  59. compileDebug: true,
  60. basedir: __dirname + '/cases' + suffix,
  61. filters: filters,
  62. filterAliases: {'markdown': 'markdown-it'},
  63. }), {output: {beautify: true}, mangle: false, compress: false, fromString: true}).code;
  64. writeFileSync(__dirname + '/output' + suffix + '/' + test + '.js', uglify.minify(pug.compileClient(str, {
  65. filename: path,
  66. pretty: false,
  67. compileDebug: false,
  68. basedir: __dirname + '/cases' + suffix,
  69. filters: filters,
  70. filterAliases: {'markdown': 'markdown-it'},
  71. }), {output: {beautify: true}, mangle: false, compress: false, fromString: true}).code);
  72. if (/filter/.test(test)) {
  73. actual = actual.replace(/\n| /g, '');
  74. html = html.replace(/\n| /g, '');
  75. }
  76. if (/mixins-unused/.test(test)) {
  77. assert(/never-called/.test(str), 'never-called is in the pug file for mixins-unused');
  78. assert(!/never-called/.test(clientCode), 'never-called should be removed from the code');
  79. }
  80. expect(actual.trim()).toEqual(html);
  81. actual = Function('pug', clientCode + '\nreturn template;')()({ title: 'Pug' });
  82. if (/filter/.test(test)) {
  83. actual = actual.replace(/\n| /g, '');
  84. }
  85. expect(actual.trim()).toEqual(html);
  86. actual = Function('pug', clientCodeDebug + '\nreturn template;')()({ title: 'Pug' });
  87. if (/filter/.test(test)) {
  88. actual = actual.replace(/\n| /g, '');
  89. }
  90. expect(actual.trim()).toEqual(html);
  91. });
  92. }
  93. module.exports = {
  94. filters,
  95. findCases,
  96. testSingle,
  97. };