var expect = require('chai').expect, through = require('through2'), Vinyl = require('vinyl'), fs = require('fs'), path = require('path'), concatCss = require('../'); function expected(file) { var base = path.join(process.cwd(), 'test/expected'); var filepath = path.resolve(base, file); return new Vinyl({ path: filepath, cwd: process.cwd(), base: base, contents: fs.readFileSync(filepath) }); } function fixture(file) { var base = path.join(process.cwd(), 'test/fixtures'); var filepath = path.join(base, file); return new Vinyl({ path: filepath, cwd: process.cwd(), base: base, contents: fs.readFileSync(filepath) }); } describe('gulp-concat-css', function() { it('should only bubble up imports', function(done) { var now = Date.now(); var stream = concatCss('build/bundle-bubbleonly.css', {inlineImports: false, rebaseUrls: false}); var expectedFile = expected('build/bundle-bubbleonly.css'); stream .pipe(through.obj(function(file, enc, cb) { //fs.writeFileSync("bundle.css", file.contents); expect(String(file.contents)).to.be.equal(String(expectedFile.contents)); expect(path.basename(file.path)).to.be.equal(path.basename(expectedFile.path)); expect(file.cwd, "cwd").to.be.equal(expectedFile.cwd); expect(file.relative, "relative").to.be.equal(expectedFile.relative); console.log('Execution time: ' + (Date.now() - now) + 'ms'); done(); })); stream.write(fixture('main.css')); stream.write(fixture('vendor/vendor.css')); stream.end(); }); it('should only rebase urls', function(done) { var now = Date.now(); var stream = concatCss('build/bundle-rebase.css', {inlineImports: false}); var expectedFile = expected('build/bundle-rebase.css'); stream .pipe(through.obj(function(file, enc, cb) { //fs.writeFileSync("bundle.css", file.contents); expect(String(file.contents)).to.be.equal(String(expectedFile.contents)); expect(path.basename(file.path)).to.be.equal(path.basename(expectedFile.path)); expect(file.cwd, "cwd").to.be.equal(expectedFile.cwd); expect(file.relative, "relative").to.be.equal(expectedFile.relative); console.log('Execution time: ' + (Date.now() - now) + 'ms'); done(); })); stream.write(fixture('main.css')); stream.write(fixture('vendor/vendor.css')); stream.end(); }); it('should only inline imports', function(done) { var now = Date.now(); var stream = concatCss('build/bundle-import.css', {inlineImports: true, rebaseUrls: false}); var expectedFile = expected('build/bundle-import.css'); stream .pipe(through.obj(function(file, enc, cb) { //fs.writeFileSync("bundle.css", file.contents); expect(String(file.contents)).to.be.equal(String(expectedFile.contents)); expect(path.basename(file.path)).to.be.equal(path.basename(expectedFile.path)); expect(file.cwd, "cwd").to.be.equal(expectedFile.cwd); expect(file.relative, "relative").to.be.equal(expectedFile.relative); console.log('Execution time: ' + (Date.now() - now) + 'ms'); done(); })); stream.write(fixture('main.css')); stream.write(fixture('vendor/vendor.css')); stream.end(); }); it('should concat, rebase urls, inline imports and bubble up external imports', function(done) { var now = Date.now(); var stream = concatCss('build/bundle-all.css'); var expectedFile = expected('build/bundle-all.css'); stream .pipe(through.obj(function(file, enc, cb) { //fs.writeFileSync("bundle.css", file.contents); expect(String(file.contents)).to.be.equal(String(expectedFile.contents)); expect(path.basename(file.path)).to.be.equal(path.basename(expectedFile.path)); expect(file.cwd, "cwd").to.be.equal(expectedFile.cwd); expect(file.relative, "relative").to.be.equal(expectedFile.relative); console.log('Execution time: ' + (Date.now() - now) + 'ms'); done(); })); stream.write(fixture('main.css')); stream.write(fixture('vendor/vendor.css')); stream.end(); }); it('should not crash if no file is provided', function(done) { var stream = concatCss('build/bundle-all.css'); stream .on('error', function() { done(false); }) .pipe(through.obj(function(file, enc, cb) { done(false); }, function() { done(); })); stream.end(); }); });