mason
Version:
simple, fun, static-file builder for jade, stylus, and javascript
165 lines (151 loc) • 5.23 kB
JavaScript
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']);
});
});
});
});