1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const spawn = require('child_process').spawn; 5 6if (process.argv[2] === 'child') { 7 process.stdout.destroy(); 8 process.stderr.destroy(); 9 console.log('stdout'); 10 process.stdout.write('rocks\n'); 11 console.error('stderr'); 12 setTimeout(function() { 13 process.stderr.write('rocks too\n'); 14 }, 10); 15 return; 16} 17 18const proc = spawn(process.execPath, [__filename, 'child'], { stdio: 'pipe' }); 19 20let stdout = ''; 21proc.stdout.setEncoding('utf8'); 22proc.stdout.on('data', common.mustCallAtLeast(function(chunk) { 23 stdout += chunk; 24}, 1)); 25 26let stderr = ''; 27proc.stderr.setEncoding('utf8'); 28proc.stderr.on('data', common.mustCallAtLeast(function(chunk) { 29 stderr += chunk; 30}, 1)); 31 32proc.on('exit', common.mustCall(function(exitCode) { 33 assert.strictEqual(exitCode, 0); 34 assert.strictEqual(stdout, 'stdout\nrocks\n'); 35 assert.strictEqual(stderr, 'stderr\nrocks too\n'); 36})); 37