blob: 0dec945e65d564fbd4537c83392f86127021b457 [file] [log] [blame]
var assert = require('assert')
, h = require('./helpers')
, jake = {}
, utils = require('../lib/utils');
utils.mixin(jake, utils);
var tests = {
'before': function () {
process.chdir('./test');
}
, 'after': function () {
process.chdir('../');
}
, 'test basic exec': function (next) {
var ex = jake.createExec('ls', function () {})
, evts = { // Events should fire in this order
cmdStart: [0, null]
, stdout: [1, null]
, cmdEnd: [2, null]
, end: [3, null]
}
, incr = 0; // Increment with each event to check order
assert.ok(ex instanceof jake.Exec);
// Make sure basic events fire and fire in the right order
for (var p in evts) {
(function (p) {
ex.addListener(p, function () {
evts[p][1] = incr;
incr++;
});
})(p);
}
ex.run();
ex.addListener('end', function () {
for (var p in evts) {
assert.equal(evts[p][0], evts[p][1]);
}
next();
});
}
, 'test an exec failure': function (next) {
var ex = jake.createExec('false', function () {});
ex.addListener('error', function (msg, code) {
assert.equal(1, code);
next();
});
ex.run();
}
, 'test exec stdout events': function (next) {
var ex = jake.createExec('echo "foo"', function () {});
ex.addListener('stdout', function (data) {
assert.equal("foo", h.trim(data.toString()));
next();
});
ex.run();
}
, 'test exec stderr events': function (next) {
var ex = jake.createExec('echo "foo" 1>&2', function () {});
ex.addListener('stderr', function (data) {
assert.equal("foo", h.trim(data.toString()));
next();
});
ex.run();
}
, 'test piping results into next command': function (next) {
var ex = jake.createExec('ls', function () {})
, data
, appended = false;
ex.addListener('stdout', function (d) {
data += h.trim(d.toString());
});
// After the first command ends, get the accumulated result,
// and use it to build a new command to append to the queue.
// Grep through the result for files that end in .js
ex.addListener('cmdEnd', function () {
// Only append after the first cmd, avoid infinite loop
if (appended) {
return;
}
appended = true;
// Take the original output and build the new command
ex.append('echo "' + data + '" | grep "\\.js$"');
// Clear out data
data = '';
});
// And the end, the stdout data has been cleared once, and the new
// data should be the result of the second command
ex.addListener('end', function () {
// Should be a list of files ending in .js
data = data.split('\n');
data.forEach(function (d) {
assert.ok(/\.js$/.test(d));
});
next();
});
ex.run();
}
};
module.exports = tests;