-
-
Notifications
You must be signed in to change notification settings - Fork 203
/
node.js
104 lines (84 loc) · 2.47 KB
/
node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import path from 'node:path';
import process from 'node:process';
import {fileURLToPath} from 'node:url';
import test from 'ava';
import {pEvent} from 'p-event';
import {execaNode} from '../index.js';
process.env.PATH = fileURLToPath(new URL('fixtures', import.meta.url)) + path.delimiter + process.env.PATH;
async function inspectMacro(t, input) {
const originalArgv = process.execArgv;
process.execArgv = [input, '-e'];
try {
const subprocess = execaNode('console.log("foo")', {
reject: false,
});
const {stdout, stderr} = await subprocess;
t.is(stdout, 'foo');
t.is(stderr, '');
} finally {
process.execArgv = originalArgv;
}
}
test('node()', async t => {
const {exitCode} = await execaNode('test/fixtures/noop.js');
t.is(exitCode, 0);
});
test('node pipe stdout', async t => {
const {stdout} = await execaNode('test/fixtures/noop.js', ['foo'], {
stdout: 'pipe',
});
t.is(stdout, 'foo');
});
test('node correctly use nodePath', async t => {
const {stdout} = await execaNode(process.platform === 'win32' ? 'hello.cmd' : 'hello.sh', {
stdout: 'pipe',
nodePath: process.platform === 'win32' ? 'cmd.exe' : 'bash',
nodeOptions: process.platform === 'win32' ? ['/c'] : [],
});
t.is(stdout, 'Hello World');
});
test('node pass on nodeOptions', async t => {
const {stdout} = await execaNode('console.log("foo")', {
stdout: 'pipe',
nodeOptions: ['-e'],
});
t.is(stdout, 'foo');
});
test.serial(
'node removes --inspect from nodeOptions when defined by parent process',
inspectMacro,
'--inspect',
);
test.serial(
'node removes --inspect=9222 from nodeOptions when defined by parent process',
inspectMacro,
'--inspect=9222',
);
test.serial(
'node removes --inspect-brk from nodeOptions when defined by parent process',
inspectMacro,
'--inspect-brk',
);
test.serial(
'node removes --inspect-brk=9222 from nodeOptions when defined by parent process',
inspectMacro,
'--inspect-brk=9222',
);
test.serial(
'node should not remove --inspect when passed through nodeOptions',
async t => {
const {stdout, stderr} = await execaNode('console.log("foo")', {
reject: false,
nodeOptions: ['--inspect', '-e'],
});
t.is(stdout, 'foo');
t.true(stderr.includes('Debugger listening'));
},
);
test('node\'s forked script has a communication channel', async t => {
const subprocess = execaNode('test/fixtures/send.js');
await pEvent(subprocess, 'message');
subprocess.send('ping');
const message = await pEvent(subprocess, 'message');
t.is(message, 'pong');
});