84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
|
var test = require('tape');
|
||
|
var watchify = require('../');
|
||
|
var browserify = require('browserify');
|
||
|
var vm = require('vm');
|
||
|
|
||
|
var fs = require('fs');
|
||
|
var path = require('path');
|
||
|
var mkdirp = require('mkdirp');
|
||
|
var through = require('through2');
|
||
|
|
||
|
var os = require('os');
|
||
|
var tmpdir = path.join((os.tmpdir || os.tmpDir)(), 'watchify-' + Math.random());
|
||
|
|
||
|
var main = path.join(tmpdir, 'main.js');
|
||
|
var file = path.join(tmpdir, 'dep.jsnum');
|
||
|
|
||
|
mkdirp.sync(tmpdir);
|
||
|
fs.writeFileSync(main, 'require("./dep.jsnum")');
|
||
|
fs.writeFileSync(file, 'console.log(555)');
|
||
|
|
||
|
function someTransform(file) {
|
||
|
if (!/\.jsnum$/.test(file)) {
|
||
|
return through();
|
||
|
}
|
||
|
function write (chunk, enc, next) {
|
||
|
if (/\d/.test(chunk)) {
|
||
|
this.push(chunk);
|
||
|
} else {
|
||
|
this.emit('error', new Error('No number in this chunk'));
|
||
|
}
|
||
|
next();
|
||
|
}
|
||
|
return through(write);
|
||
|
}
|
||
|
|
||
|
test('errors in transform', function (t) {
|
||
|
t.plan(6);
|
||
|
var b = browserify(main, watchify.args);
|
||
|
b.transform(someTransform);
|
||
|
var w = watchify(b);
|
||
|
w.bundle(function (err, src) {
|
||
|
t.ifError(err);
|
||
|
t.equal(run(src), '555\n');
|
||
|
breakTheBuild();
|
||
|
});
|
||
|
function breakTheBuild() {
|
||
|
setTimeout(function() {
|
||
|
fs.writeFileSync(file, 'console.log()');
|
||
|
}, 1000);
|
||
|
w.once('update', function () {
|
||
|
w.bundle(function (err, src) {
|
||
|
t.ok(err instanceof Error, 'should be error');
|
||
|
t.ok(/^No number in this chunk/.test(err.message));
|
||
|
fixTheBuild();
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
function fixTheBuild() {
|
||
|
setTimeout(function() {
|
||
|
fs.writeFileSync(file, 'console.log(333)');
|
||
|
}, 1000);
|
||
|
var safety = setTimeout(function() {
|
||
|
t.fail("gave up waiting");
|
||
|
w.close();
|
||
|
t.end();
|
||
|
}, 5000);
|
||
|
w.once('update', function () {
|
||
|
clearTimeout(safety);
|
||
|
w.bundle(function (err, src) {
|
||
|
t.ifError(err);
|
||
|
t.equal(run(src), '333\n');
|
||
|
w.close();
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function run (src) {
|
||
|
var output = '';
|
||
|
function log (msg) { output += msg + '\n' }
|
||
|
vm.runInNewContext(src, { console: { log: log } });
|
||
|
return output;
|
||
|
}
|