power-assert-formatter
Version:
Power Assert output formatter
154 lines (138 loc) • 4.04 kB
JavaScript
var gulp = require('gulp');
var gutil = require('gulp-util');
var jshint = require('gulp-jshint');
var stylish = require('jshint-stylish');
var mocha = require('gulp-mocha');
var mochaPhantomJS = require('gulp-mocha-phantomjs');
var webserver = require('gulp-webserver');
var del = require('del');
var source = require('vinyl-source-stream');
var through = require('through2');
var browserify = require('browserify');
var licensify = require('licensify');
var derequire = require('gulp-derequire');
var dereserve = require('gulp-dereserve');
var config = {
jshint: {
src: './lib/**/*.js'
},
bundle: {
standalone: 'powerAssertFormatter',
srcFile: './index.js',
destDir: './build',
destName: 'power-assert-formatter.js'
},
coverage: {
filename: 'coverage.lcov'
},
test: {
base: './test/',
pattern: '**/*_test.js',
amd: 'test/test-amd.html',
browser: 'test/test-browser.html'
}
};
function captureStdout (filespec) {
var orig, log = '';
function spy (str) {
log += str;
}
function pass (file, encoding, callback) {
this.push(file);
callback();
}
return {
start: through.obj(pass, function (callback) {
orig = process.stdout.write;
process.stdout.write = spy;
callback();
}),
finish: through.obj(pass, function (callback) {
var file = new gutil.File(filespec);
file.contents = new Buffer(log);
this.push(file);
process.stdout.write = orig;
log = '';
orig = null;
callback();
})
};
}
function runMochaWithBlanket() {
var blanket = require('./coverage/blanket');
var capt = captureStdout({
cwd: __dirname,
base: __dirname,
path: __dirname + '/' + config.coverage.filename
});
return gulp
.src(config.test.base + config.test.pattern, {read: false})
.pipe(capt.start)
.pipe(mocha({
ui: 'tdd',
reporter: 'mocha-lcov-reporter'
}))
.pipe(capt.finish)
.pipe(gulp.dest('.'))
.on('error', gutil.log);
}
function runMochaSimply() {
return gulp
.src(config.test.base + config.test.pattern, {read: false})
.pipe(mocha({
ui: 'tdd',
reporter: 'dot'
}))
.on('error', gutil.log);
}
gulp.task('serve', function() {
gulp.src(__dirname)
.pipe(webserver({
port: 9001,
directoryListing: true
}));
});
gulp.task('watch', function () {
gulp.watch('index.js', runMochaSimply);
gulp.watch('{lib,test}/**/*.js', runMochaSimply);
runMochaSimply();
});
gulp.task('clean_bundle', function (done) {
del([config.bundle.destDir], done);
});
gulp.task('clean_coverage', function (done) {
del([config.coverage.filename], done);
});
gulp.task('bundle', ['clean_bundle'], function() {
var b = browserify({entries: config.bundle.srcFile, standalone: config.bundle.standalone});
b.plugin(licensify);
var bundleStream = b.bundle();
return bundleStream
.pipe(source(config.bundle.destName))
.pipe(dereserve())
.pipe(derequire())
.pipe(gulp.dest(config.bundle.destDir));
});
gulp.task('unit', function () {
return runMochaSimply();
});
gulp.task('coverage', ['clean_coverage'], function () {
return runMochaWithBlanket();
});
gulp.task('test_amd', function () {
return gulp
.src(config.test.amd)
.pipe(mochaPhantomJS({reporter: 'dot'}));
});
gulp.task('test_browser', function () {
return gulp
.src(config.test.browser)
.pipe(mochaPhantomJS({reporter: 'dot'}));
});
gulp.task('lint', function() {
return gulp.src(config.jshint.src)
.pipe(jshint())
.pipe(jshint.reporter(stylish));
});
gulp.task('clean', ['clean_coverage', 'clean_bundle']);
gulp.task('test', ['unit','test_browser','test_amd']);