UNPKG

mason

Version:

simple, fun, static-file builder for jade, stylus, and javascript

165 lines (151 loc) 5.23 kB
var should = require('should'); var fs = require('fs'); var rimraf = require('rimraf'); var path = require('path'); var mason = require('../index'); var COMPILED = __dirname + '/compiled'; function emptyCompiled() { rimraf.sync(COMPILED); fs.mkdirSync(COMPILED); } function startsEmpty() { it('starts empty', function() { var files = fs.readdirSync(COMPILED); files.should.be.empty; }); } describe('Building', function() { describe('JS with uglify', function() { var A1_FILE = __dirname + '/fixtures/public/vendor/a1.js'; var A2_FILE = __dirname + '/fixtures/public/vendor/a2.js'; var MASON_FILE = __dirname + '/fixtures/mason_js.json'; var DEST_FILE = __dirname + '/compiled/a.js'; var initialSize, aJs; before(emptyCompiled); before(function getInitialSize() { var a1 = fs.statSync(A1_FILE); var a2 = fs.statSync(A2_FILE); initialSize = a1.size + a2.size; }); describe('/compiled directory', startsEmpty); describe('build', function() { it('should run without error', function() { mason(MASON_FILE).build(); }); }); describe('target a.js', function() { it('should exist', function() { aJs = fs.statSync(DEST_FILE); aJs.isFile().should.equal(true); }); it('should have working content', function() { var compiledA = require(DEST_FILE); should.exist(compiledA.a1); should.exist(compiledA.a2); compiledA.a1.should.equal('This is a1'); compiledA.a2().should.equal('This is a2'); should.not.exist(compiledA.b1); }); it('should have been compressed', function() { aJs.size.should.be.lessThan(initialSize); }); }); describe('target b.js', function() { it('should exist', function() { var bJs = fs.statSync(__dirname + '/compiled/b/index.js'); bJs.isFile().should.equal(true); }); it('should have uglified content', function() { var compiledB = require(__dirname + '/compiled/b/index.js'); should.exist(compiledB.b1); should.exist(compiledB.b2); compiledB.b1.should.equal('This is b1'); compiledB.b2().should.equal('This is b2'); should.not.exist(compiledB.a1); }); }); }); describe('stylus', function() { var MASON_FILE = __dirname + '/fixtures/mason_stylus.json'; var DEST_FILE = __dirname + '/compiled/a.css'; var REF_FILE = __dirname + '/fixtures/reference/a.css'; before(emptyCompiled); describe('/compiled directory', startsEmpty); describe('build', function() { it('should run without error', function() { mason(MASON_FILE).build(); }); }); describe('target a.css', function() { it('should exist', function() { var aCss = fs.statSync(DEST_FILE); aCss.isFile().should.equal(true); }); it('should have compiled css content', function() { var css = fs.readFileSync(DEST_FILE, 'utf-8'); var ref = fs.readFileSync(REF_FILE, 'utf-8'); css.should.equal(ref); }); }); }); describe('simple jade file', function() { var MASON_FILE = __dirname + '/fixtures/mason_jade_simple.json'; var DEST_FILE = __dirname + '/compiled/a.html'; var REF_FILE = __dirname + '/fixtures/reference/a.html'; before(emptyCompiled); describe('/compiled directory', startsEmpty); describe('build', function() { it('should run without error', function() { mason(MASON_FILE).build(); }); }); describe('target viewA', function() { it('should exist', function() { var aHtml = fs.statSync(DEST_FILE); aHtml.isFile().should.equal(true); }); it('should have compiled html content', function() { var html = fs.readFileSync(DEST_FILE, 'utf-8'); var ref = fs.readFileSync(REF_FILE, 'utf-8'); html.should.equal(ref); }); }); }); describe('complex jade (locals, mode, only)', function() { var MASON_FILE = __dirname + '/fixtures/mason_jade_complex.json'; var DEST_DIR = __dirname + '/compiled'; var DEST_FILE = __dirname + '/compiled/b.html'; var REF_FILE = __dirname + '/fixtures/reference/b.html'; before(emptyCompiled); describe('/compiled directory', startsEmpty); describe('build', function() { it('should run without error', function() { mason({ file: MASON_FILE, modes: { 'a.js': 'debug', 'b.js': 'uglify' }, only: ['viewB', 'a.js', 'b.js'] }).build(); }); }); describe('target viewB', function() { it('should exist', function() { var aHtml = fs.statSync(DEST_FILE); aHtml.isFile().should.equal(true); }); it('should have compiled html content', function() { var html = fs.readFileSync(DEST_FILE, 'utf-8'); var ref = fs.readFileSync(REF_FILE, 'utf-8'); html.should.equal(ref); }); }); describe('omitted targets', function() { it('should not exist', function() { var aCss = fs.readdirSync(DEST_DIR); aCss.should.eql(['a.js', 'b', 'b.html']); }); }); }); });