UNPKG

5.92 kBJavaScriptView Raw
1'use strict';
2
3var gulp = require('gulp');
4var gutil = require('gulp-util');
5var jshint = require('gulp-jshint');
6var stylish = require('jshint-stylish');
7var mocha = require('gulp-mocha');
8var mochaPhantomJS = require('gulp-mocha-phantomjs');
9var webserver = require('gulp-webserver');
10var del = require('del');
11var path = require('path');
12var source = require('vinyl-source-stream');
13var through = require('through2');
14var browserify = require('browserify');
15var licensify = require('licensify');
16var derequire = require('gulp-derequire');
17var dereserve = require('gulp-dereserve');
18var config = {
19 dist: {
20 destDir: './build',
21 destName: 'power-assert-formatter.js'
22 },
23 jshint: {
24 src: './lib/**/*.js'
25 },
26 bundle: {
27 standalone: 'powerAssertFormatter',
28 srcFile: './index.js',
29 destDir: './local_build',
30 destName: 'power-assert-formatter.js'
31 },
32 assert_bundle: {
33 standalone: 'assert',
34 require: 'assert',
35 destDir: './local_build',
36 destName: 'assert.js'
37 },
38 escodegen_bundle: {
39 standalone: 'escodegen',
40 srcFile: './node_modules/escodegen/escodegen.js',
41 destDir: './local_build',
42 destName: 'escodegen.js'
43 },
44 coverage: {
45 filename: 'coverage.lcov'
46 },
47 test: {
48 base: './test/',
49 pattern: '**/*_test.js',
50 amd: 'test/test-amd.html',
51 browser: 'test/test-browser.html'
52 }
53};
54var LOCAL_BUILDS = ['assert', 'escodegen'];
55
56function captureStdout (filespec) {
57 var orig, log = '';
58 function spy (str) {
59 log += str;
60 }
61 function pass (file, encoding, callback) {
62 this.push(file);
63 callback();
64 }
65 return {
66 start: through.obj(pass, function (callback) {
67 orig = process.stdout.write;
68 process.stdout.write = spy;
69 callback();
70 }),
71 finish: through.obj(pass, function (callback) {
72 var file = new gutil.File(filespec);
73 file.contents = new Buffer(log);
74 this.push(file);
75 process.stdout.write = orig;
76 log = '';
77 orig = null;
78 callback();
79 })
80 };
81}
82
83function runMochaWithBlanket() {
84 var blanket = require('./coverage/blanket');
85 var capt = captureStdout({
86 cwd: __dirname,
87 base: __dirname,
88 path: __dirname + '/' + config.coverage.filename
89 });
90 return gulp
91 .src(config.test.base + config.test.pattern, {read: false})
92 .pipe(capt.start)
93 .pipe(mocha({
94 ui: 'tdd',
95 reporter: 'mocha-lcov-reporter'
96 }))
97 .pipe(capt.finish)
98 .pipe(gulp.dest('.'))
99 .on('error', gutil.log);
100}
101
102function runMochaSimply() {
103 return gulp
104 .src(config.test.base + config.test.pattern, {read: false})
105 .pipe(mocha({
106 ui: 'tdd',
107 reporter: 'dot'
108 }))
109 .on('error', gutil.log);
110}
111
112gulp.task('serve', function() {
113 gulp.src(__dirname)
114 .pipe(webserver({
115 port: 9001,
116 directoryListing: true
117 }));
118});
119
120gulp.task('watch', function () {
121 gulp.watch('index.js', runMochaSimply);
122 gulp.watch('{lib,test}/**/*.js', runMochaSimply);
123 runMochaSimply();
124});
125
126gulp.task('clean_bundle', function () {
127 del.sync([path.join(config.bundle.destDir, config.bundle.destName)]);
128});
129
130gulp.task('clean_coverage', function (done) {
131 del([config.coverage.filename], done);
132});
133
134gulp.task('bundle', ['clean_bundle'], function() {
135 var b = browserify({entries: config.bundle.srcFile, standalone: config.bundle.standalone});
136 b.plugin(licensify);
137 var bundleStream = b.bundle();
138 return bundleStream
139 .pipe(source(config.bundle.destName))
140 .pipe(dereserve())
141 .pipe(derequire())
142 .pipe(gulp.dest(config.bundle.destDir));
143});
144
145gulp.task('unit', function () {
146 return runMochaSimply();
147});
148
149gulp.task('coverage', ['clean_coverage'], function () {
150 return runMochaWithBlanket();
151});
152
153gulp.task('test_amd', ['bundle', 'build_deps'], function () {
154 return gulp
155 .src(config.test.amd)
156 .pipe(mochaPhantomJS({reporter: 'dot'}));
157});
158
159gulp.task('test_browser', ['bundle', 'build_deps'], function () {
160 return gulp
161 .src(config.test.browser)
162 .pipe(mochaPhantomJS({reporter: 'dot'}));
163});
164
165gulp.task('lint', function() {
166 return gulp.src(config.jshint.src)
167 .pipe(jshint())
168 .pipe(jshint.reporter(stylish));
169});
170
171LOCAL_BUILDS.forEach(function (name) {
172 gulp.task('clean_' + name + '_bundle', function () {
173 del.sync([path.join(config[name + '_bundle'].destDir, config[name + '_bundle'].destName)]);
174 });
175 gulp.task(name + '_bundle', ['clean_' + name + '_bundle'], function() {
176 var b = browserify({standalone: config[name + '_bundle'].standalone});
177 if (config[name + '_bundle'].srcFile) {
178 b.add(config[name + '_bundle'].srcFile);
179 }
180 if (config[name + '_bundle'].require) {
181 b.require(config[name + '_bundle'].require);
182 }
183 return b.bundle()
184 .pipe(source(config[name + '_bundle'].destName))
185 .pipe(derequire())
186 .pipe(gulp.dest(config[name + '_bundle'].destDir));
187 });
188});
189gulp.task('clean_deps', LOCAL_BUILDS.map(function (name) { return 'clean_' + name + '_bundle'; }));
190gulp.task('build_deps', LOCAL_BUILDS.map(function (name) { return name + '_bundle'; }));
191
192gulp.task('clean_dist', function () {
193 del.sync([config.dist.destDir]);
194});
195
196gulp.task('dist', ['clean_dist', 'bundle'], function () {
197 return gulp
198 .src(path.join(config.bundle.destDir, config.bundle.destName))
199 .pipe(gulp.dest(config.dist.destDir));
200});
201
202gulp.task('clean', ['clean_dist', 'clean_coverage', 'clean_bundle', 'clean_deps']);
203
204gulp.task('test', ['unit','test_browser','test_amd']);