39c8b14f |
1 | var spawn = require('child_process').spawn; |
2 | var test = require('tap').test; |
3 | |
4 | test('dotSlashEmpty', testCmd('./bin.js', [])); |
5 | |
6 | test('dotSlashArgs', testCmd('./bin.js', [ 'a', 'b', 'c' ])); |
7 | |
8 | test('nodeEmpty', testCmd('node bin.js', [])); |
9 | |
10 | test('nodeArgs', testCmd('node bin.js', [ 'x', 'y', 'z' ])); |
11 | |
12 | test('whichNodeEmpty', function (t) { |
13 | var which = spawn('which', ['node']); |
14 | |
15 | which.stdout.on('data', function (buf) { |
16 | t.test( |
17 | testCmd(buf.toString().trim() + ' bin.js', []) |
18 | ); |
19 | t.end(); |
20 | }); |
21 | |
22 | which.stderr.on('data', function (err) { |
23 | assert.error(err); |
24 | t.end(); |
25 | }); |
26 | }); |
27 | |
28 | test('whichNodeArgs', function (t) { |
29 | var which = spawn('which', ['node']); |
30 | |
31 | which.stdout.on('data', function (buf) { |
32 | t.test( |
33 | testCmd(buf.toString().trim() + ' bin.js', [ 'q', 'r' ]) |
34 | ); |
35 | t.end(); |
36 | }); |
37 | |
38 | which.stderr.on('data', function (err) { |
39 | t.error(err); |
40 | t.end(); |
41 | }); |
42 | }); |
43 | |
44 | function testCmd (cmd, args) { |
45 | |
46 | return function (t) { |
47 | var to = setTimeout(function () { |
48 | assert.fail('Never got stdout data.') |
49 | }, 5000); |
50 | |
51 | var oldDir = process.cwd(); |
52 | process.chdir(__dirname + '/_'); |
53 | |
54 | var cmds = cmd.split(' '); |
55 | |
56 | var bin = spawn(cmds[0], cmds.slice(1).concat(args.map(String))); |
57 | process.chdir(oldDir); |
58 | |
59 | bin.stderr.on('data', function (err) { |
60 | t.error(err); |
61 | t.end(); |
62 | }); |
63 | |
64 | bin.stdout.on('data', function (buf) { |
65 | clearTimeout(to); |
66 | var _ = JSON.parse(buf.toString()); |
67 | t.same(_.map(String), args.map(String)); |
68 | t.end(); |
69 | }); |
70 | }; |
71 | } |