1// Flags: --expose-internals
2'use strict';
3const common = require('../common');
4const assert = require('assert');
5const cp = require('child_process');
6const internalCp = require('internal/child_process');
7const cmd = process.execPath;
8const args = ['-p', '42'];
9const options = { windowsHide: true };
10
11// Since windowsHide isn't really observable, monkey patch spawn() and
12// spawnSync() to verify that the flag is being passed through correctly.
13const originalSpawn = internalCp.ChildProcess.prototype.spawn;
14const originalSpawnSync = internalCp.spawnSync;
15
16internalCp.ChildProcess.prototype.spawn = common.mustCall(function(options) {
17  assert.strictEqual(options.windowsHide, true);
18  return originalSpawn.apply(this, arguments);
19}, 2);
20
21internalCp.spawnSync = common.mustCall(function(options) {
22  assert.strictEqual(options.windowsHide, true);
23  return originalSpawnSync.apply(this, arguments);
24});
25
26{
27  const child = cp.spawnSync(cmd, args, options);
28
29  assert.strictEqual(child.status, 0);
30  assert.strictEqual(child.signal, null);
31  assert.strictEqual(child.stdout.toString().trim(), '42');
32  assert.strictEqual(child.stderr.toString().trim(), '');
33}
34
35{
36  const child = cp.spawn(cmd, args, options);
37
38  child.on('exit', common.mustCall((code, signal) => {
39    assert.strictEqual(code, 0);
40    assert.strictEqual(signal, null);
41  }));
42}
43
44{
45  const callback = common.mustSucceed((stdout, stderr) => {
46    assert.strictEqual(stdout.trim(), '42');
47    assert.strictEqual(stderr.trim(), '');
48  });
49
50  cp.execFile(cmd, args, options, callback);
51}
52