var spawn = require('child_process').spawn; var test = require('tap').test; test('dotSlashEmpty', testCmd('./bin.js', [])); test('dotSlashArgs', testCmd('./bin.js', [ 'a', 'b', 'c' ])); test('nodeEmpty', testCmd('node bin.js', [])); test('nodeArgs', testCmd('node bin.js', [ 'x', 'y', 'z' ])); test('whichNodeEmpty', function (t) { var which = spawn('which', ['node']); which.stdout.on('data', function (buf) { t.test( testCmd(buf.toString().trim() + ' bin.js', []) ); t.end(); }); which.stderr.on('data', function (err) { assert.error(err); t.end(); }); }); test('whichNodeArgs', function (t) { var which = spawn('which', ['node']); which.stdout.on('data', function (buf) { t.test( testCmd(buf.toString().trim() + ' bin.js', [ 'q', 'r' ]) ); t.end(); }); which.stderr.on('data', function (err) { t.error(err); t.end(); }); }); function testCmd (cmd, args) { return function (t) { var to = setTimeout(function () { assert.fail('Never got stdout data.') }, 5000); var oldDir = process.cwd(); process.chdir(__dirname + '/_'); var cmds = cmd.split(' '); var bin = spawn(cmds[0], cmds.slice(1).concat(args.map(String))); process.chdir(oldDir); bin.stderr.on('data', function (err) { t.error(err); t.end(); }); bin.stdout.on('data', function (buf) { clearTimeout(to); var _ = JSON.parse(buf.toString()); t.same(_.map(String), args.map(String)); t.end(); }); }; }