shelljs/test/exec.js
Artur Adib 534c05dc25 exec()
2012-03-02 11:17:05 -05:00

75 lines
2.0 KiB
JavaScript

var shell = require('..');
var assert = require('assert'),
path = require('path'),
fs = require('fs');
shell.silent();
function numLines(str) {
return typeof str === 'string' ? str.match(/\n/g).length : 0;
}
//
// Invalids
//
shell.exec();
assert.ok(shell.error());
var result = shell.exec('asdfasdf'); // could not find command
assert.ok(result.code > 0);
//
// Valids
//
var result = shell.exec('node -e \"console.log(1234);\"'); // stdout
assert.equal(shell.error(), null);
assert.equal(result.code, 0);
assert.ok(result.output === '1234\n' || result.output === '1234\nundefined\n'); // 'undefined' for v0.4
var result = shell.exec('node -e \"process.exit(12);\"'); // stdout
assert.equal(shell.error(), null);
assert.equal(result.code, 12);
var result = shell.exec('node -e \"console.error(1234);\"'); // stderr
assert.equal(shell.error(), null);
assert.equal(result.code, 0);
assert.ok(result.output === '1234\n' || result.output === '1234\nundefined\n'); // 'undefined' for v0.4
var result = shell.exec('node -e \"console.error(1234); console.log(666);\"'); // stderr + stdout
assert.equal(shell.error(), null);
assert.equal(result.code, 0);
assert.ok(result.output === '1234\n666\n' || result.output === '1234\n666\nundefined\n'); // 'undefined' for v0.4
// Interaction with cd
shell.cd('resources/external');
var result = shell.exec('node node_script.js');
assert.equal(shell.error(), null);
assert.equal(result.code, 0);
assert.equal(result.output, 'node_script_1234\n');
// Async
var asyncFlags = [];
asyncFlags[0] = false;
shell.exec('node -e \"console.log(1234);\"', {async:true}, function(code, output) { // callback as 2nd argument
assert.equal(code, 0);
assert.ok(output === '1234\n' || output === '1234\nundefined\n'); // 'undefined' for v0.4
asyncFlags[0] = true;
});
assert.equal(shell.error(), null);
shell.exec('node -e \"console.log(1234)\"', {async:true}); // no callback
assert.equal(shell.error(), null);
setTimeout(function() {
asyncFlags.forEach(function(flag) {
assert.equal(flag, true);
});
shell.exit(123);
}, 2000);