1 | 'use strict';
|
2 |
|
3 | var assert = require('assert');
|
4 | var vm = require('vm');
|
5 | var fs = require('fs');
|
6 | var path = require('path');
|
7 | var sleep = require('try-thread-sleep');
|
8 |
|
9 | function testSpawn(spawn) {
|
10 | var result = spawn("node", [__dirname + '/test-spawn.js'], {input: 'my-output'});
|
11 | assert(result.status === 0);
|
12 | assert(Buffer.isBuffer(result.stdout));
|
13 | assert(Buffer.isBuffer(result.stderr));
|
14 | assert(result.stdout.toString() === 'output written');
|
15 | assert(result.stderr.toString() === 'error log exists');
|
16 | assert(fs.readFileSync(__dirname + '/output.txt', 'utf8') === 'my-output');
|
17 | fs.unlinkSync(__dirname + '/output.txt');
|
18 |
|
19 | var result = spawn("node", [__dirname + '/test-spawn.js'], {
|
20 | input: 'my-output',
|
21 | encoding: 'utf-8'
|
22 | });
|
23 | assert(result.status === 0);
|
24 | assert(result.stdout === 'output written');
|
25 | assert(result.stderr === 'error log exists');
|
26 | assert.deepEqual(result.output, [null, 'output written', 'error log exists']);
|
27 | assert(fs.readFileSync(__dirname + '/output.txt', 'utf8') === 'my-output');
|
28 | fs.unlinkSync(__dirname + '/output.txt');
|
29 |
|
30 | var result = spawn("node", [__dirname + '/test-spawn-fail.js'], {input: 'my-output'});
|
31 | assert(result.status === 13);
|
32 | assert(Buffer.isBuffer(result.stdout));
|
33 | assert(Buffer.isBuffer(result.stderr));
|
34 | assert(result.stdout.toString() === 'output written');
|
35 | assert(result.stderr.toString() === 'error log exists');
|
36 | assert(fs.readFileSync(__dirname + '/output.txt', 'utf8') === 'my-output');
|
37 | fs.unlinkSync(__dirname + '/output.txt');
|
38 |
|
39 | var result = spawn("node", [__dirname + '/test-empty.js'], {input: 'my-output'});
|
40 | assert(result.status === 0);
|
41 | assert(Buffer.isBuffer(result.stdout));
|
42 | assert(Buffer.isBuffer(result.stderr));
|
43 | assert(result.stdout.toString() === '');
|
44 | assert(result.stderr.toString() === '');
|
45 |
|
46 |
|
47 | |
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 | console.log('test pass');
|
56 | }
|
57 |
|
58 | if (sleep.native) {
|
59 | console.log('Using native thread-sleep');
|
60 | } else {
|
61 | console.log('Using busy waiting');
|
62 | }
|
63 | if (require('child_process').spawnSync) {
|
64 | console.log('# Test built in node API');
|
65 | testSpawn(require('child_process').spawnSync);
|
66 | } else {
|
67 | console.log('# SKIP Test built in node API');
|
68 | }
|
69 | console.log('# Test fallback operation');
|
70 | testSpawn(require('../lib/spawn-sync'));
|
71 |
|
72 | console.log('All tests passed');
|