UNPKG

gulp-htmlprocessor

Version:

Process html files at build time to modify them depending on the release environment

433 lines (354 loc) 13.8 kB
'use strict'; var assert = require('assert'), gulp = require('gulp'), through = require('through2'), fs = require('fs'), Q = require('q'), htmlprocessor = require('../index'); describe('gulp-htmlprocessor in buffer mode', function() { it('should process and output an html file as defined by the build special comments for dev target', function(done) { gulp.src('test/fixtures/index.html') .pipe(htmlprocessor({ data: { message: 'This is dev target' }, environment: 'dev' })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/dev/index.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('should process and output an html file as defined by the build special comments for dist target', function(done) { gulp.src('test/fixtures/index.html') .pipe(htmlprocessor({ data: { message: 'This is dist target' }, environment: 'dist' })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/dist/index.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('should be able to process a template with custom delimiters', function(done) { gulp.src('test/fixtures/custom.html') .pipe(htmlprocessor({ data: { message: 'This has custom delimiters for the template' }, environment: 'dist', templateSettings: { interpolate: /{{([\s\S]+?)}}/g } })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/custom/custom.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('should process and output an html file as defined by the build special comments for marker target', function(done) { gulp.src('test/fixtures/commentMarker.html') .pipe(htmlprocessor({ data: { message: 'This uses a custom comment marker', }, commentMarker: 'process', environment: 'marker' })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/commentMarker/commentMarker.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('should remove build comments for non-targets', function(done) { gulp.src('test/fixtures/strip.html') .pipe(htmlprocessor({ strip: true })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/strip/strip.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('parse comment block defining multiple targets', function(done) { var deferred1 = Q.defer(), deferred2 = Q.defer(), deferred3 = Q.defer(); gulp.src('test/fixtures/multiple.html') .pipe(htmlprocessor({ environment: 'mult_one' })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/multiple/mult_one.html').toString('utf-8'); try { assert.equal(actual, expected); } catch(e) { deferred1.reject(e); } deferred1.resolve(); })); gulp.src('test/fixtures/multiple.html') .pipe(htmlprocessor({ environment: 'mult_two' })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/multiple/mult_two.html').toString('utf-8'); try { assert.equal(actual, expected); } catch(e) { deferred2.reject(e); } deferred2.resolve(); })); gulp.src('test/fixtures/multiple.html') .pipe(htmlprocessor({ environment: 'mult_three' })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/multiple/mult_three.html').toString('utf-8'); try { assert.equal(actual, expected); } catch(e) { deferred3.reject(e); } deferred3.resolve(); })); Q.all([ deferred1.promise, deferred2.promise, deferred3.promise ]).then(function() { done(); }, function(error) { done(error); }); }); it('include a js file', function(done) { gulp.src('test/fixtures/include.html') .pipe(htmlprocessor('')) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/include/include.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('correctly parse build comments inside conditional ie statement', function(done) { gulp.src('test/fixtures/conditional_ie.html') .pipe(htmlprocessor('')) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/conditional_ie/conditional_ie.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('recursively process included files', function(done) { gulp.src('test/fixtures/recursive.html') .pipe(htmlprocessor({ recursive: true })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/recursive/recursive.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); it('define custom block types', function(done) { gulp.src('test/fixtures/custom_blocktype.html') .pipe(htmlprocessor({ customBlockTypes: ['test/fixtures/custom_blocktype.js'] })) .pipe(through.obj(function(file, enc) { var actual = file.contents.toString(enc), expected = fs.readFileSync('test/expected/custom_blocktype/custom_blocktype.html').toString('utf-8'); assert.equal(actual, expected); done(); })); }); }); /* 'use strict'; var utils = require('../lib/utils'); var index = require('../index'); module.exports = { dev: function (test) { test.expect(1); index({ src: ['test/fixtures/index.html'], dest: 'test/fixtures/dev/index.processed.html' }, { data: { message: 'This is dev target' }, environment: 'dev' } ); var actual = utils.read('test/fixtures/dev/index.processed.html'); var expected = utils.read('test/expected/dev/index.html'); test.equal(actual, expected, 'should process and output an html file as defined by the build special comments for dev target'); test.done(); }, dist: function (test) { test.expect(1); index({ src: ['test/fixtures/index.html'], dest: 'test/fixtures/dist/index.processed.html' }, { data: { message: 'This is dist target' }, environment: 'dist' } ); var actual = utils.read('test/fixtures/dist/index.processed.html'); var expected = utils.read('test/expected/dist/index.html'); test.equal(actual, expected, 'should process and output an html file as defined by the build special comments for dist target'); test.done(); }, custom: function (test) { test.expect(1); index({ src: ['test/fixtures/custom.html'], dest: 'test/fixtures/custom/custom.processed.html' }, { data: { message: 'This has custom delimiters for the template' }, environment: 'dist', templateSettings: { interpolate: /{{([\s\S]+?)}}/g } } ); var actual = utils.read('test/fixtures/custom/custom.processed.html'); var expected = utils.read('test/expected/custom/custom.html'); test.equal(actual, expected, 'should be able to process a template with custom delimiters'); test.done(); }, marker: function (test) { test.expect(1); index({ src: ['test/fixtures/custom.html'], dest: 'test/fixtures/custom/custom.processed.html' }, { data: { message: 'This uses a custom comment marker', }, commentMarker: 'process', environment: 'marker' } ); var actual = utils.read('test/fixtures/commentMarker/commentMarker.processed.html'); var expected = utils.read('test/expected/commentMarker/commentMarker.html'); test.equal(actual, expected, 'should process and output an html file as defined by the build special comments for marker target'); test.done(); }, strip: function (test) { test.expect(1); index({ src: ['test/fixtures/strip.html'], dest: 'test/fixtures/strip/strip.processed.html' }, {strip: true} ); var actual = utils.read('test/fixtures/strip/strip.processed.html'); var expected = utils.read('test/expected/strip/strip.html'); test.equal(actual, expected, 'should remove build comments for non-targets'); test.done(); }, multiple: function (test) { test.expect(3); index({ src: ['test/fixtures/multiple.html'], dest: 'test/fixtures/multiple/mult_one.html' }); index({ src: ['test/fixtures/multiple.html'], dest: 'test/fixtures/multiple/mult_two.html' }); index({ src: ['test/fixtures/multiple.html'], dest: 'test/fixtures/multiple/mult_three.html' }); var actual = utils.read('test/fixtures/multiple/mult_one.processed.html'); var expected = utils.read('test/expected/multiple/mult_one.html'); test.equal(actual, expected, 'parse comment block defining multiple targets (1)'); actual = utils.read('test/fixtures/multiple/mult_two.processed.html'); expected = utils.read('test/expected/multiple/mult_two.html'); test.equal(actual, expected, 'parse comment block defining multiple targets (2)'); actual = utils.read('test/fixtures/multiple/mult_three.processed.html'); expected = utils.read('test/expected/multiple/mult_three.html'); test.equal(actual, expected, 'parse comment block defining multiple targets (3)'); test.done(); }, include_js: function (test) { test.expect(1); index({ src: ['test/fixtures/include.html'], dest: 'test/fixtures/include/include.processed.html' }); var actual = utils.read('test/fixtures/include/include.processed.html'); var expected = utils.read('test/expected/include/include.html'); test.equal(actual, expected, 'include a js file'); test.done(); }, conditional_ie: function (test) { test.expect(1); index({ src: ['test/fixtures/conditional_ie.html'], dest: 'test/fixtures/conditional_ie/conditional_ie.processed.html' }); var actual = utils.read('test/fixtures/conditional_ie/conditional_ie.processed.html'); var expected = utils.read('test/expected/conditional_ie/conditional_ie.html'); test.equal(actual, expected, 'correctly parse build comments inside conditional ie statement'); test.done(); }, recursive_process: function (test) { test.expect(1); index({ src: ['test/fixtures/recursive.html'], dest: 'test/fixtures/recursive/recursive.processed.html' }, { recursive: true }); var actual = utils.read('test/fixtures/recursive/recursive.processed.html'); var expected = utils.read('test/expected/recursive/recursive.html'); test.equal(actual, expected, 'recursively process included files'); test.done(); }, custom_blocktype: function (test) { test.expect(1); index({ src: ['test/fixtures/custom_blocktype.html'], dest: 'test/fixtures/custom_blocktype/custom_blocktype.processed.html' }, { customBlockTypes: ['test/fixtures/custom_blocktype.js'] }); var actual = utils.read('test/fixtures/custom_blocktype/custom_blocktype.processed.html'); var expected = utils.read('test/expected/custom_blocktype/custom_blocktype.html'); test.equal(actual, expected, 'define custom block types'); test.done(); } }; */