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