1'use strict'; 2const common = require('../common'); 3const stdoutData = 'foo'; 4const stderrData = 'bar'; 5 6if (process.argv[2] === 'child') { 7 // The following console calls are part of the test. 8 console.log(stdoutData); 9 console.error(stderrData); 10} else { 11 const assert = require('assert'); 12 const cp = require('child_process'); 13 const expectedStdout = `${stdoutData}\n`; 14 const expectedStderr = `${stderrData}\n`; 15 function run(options, callback) { 16 const cmd = `"${process.execPath}" "${__filename}" child`; 17 18 cp.exec(cmd, options, common.mustSucceed((stdout, stderr) => { 19 callback(stdout, stderr); 20 })); 21 } 22 23 // Test default encoding, which should be utf8. 24 run({}, (stdout, stderr) => { 25 assert.strictEqual(typeof stdout, 'string'); 26 assert.strictEqual(typeof stderr, 'string'); 27 assert.strictEqual(stdout, expectedStdout); 28 assert.strictEqual(stderr, expectedStderr); 29 }); 30 31 // Test explicit utf8 encoding. 32 run({ encoding: 'utf8' }, (stdout, stderr) => { 33 assert.strictEqual(typeof stdout, 'string'); 34 assert.strictEqual(typeof stderr, 'string'); 35 assert.strictEqual(stdout, expectedStdout); 36 assert.strictEqual(stderr, expectedStderr); 37 }); 38 39 // Test cases that result in buffer encodings. 40 [undefined, null, 'buffer', 'invalid'].forEach((encoding) => { 41 run({ encoding }, (stdout, stderr) => { 42 assert(stdout instanceof Buffer); 43 assert(stdout instanceof Buffer); 44 assert.strictEqual(stdout.toString(), expectedStdout); 45 assert.strictEqual(stderr.toString(), expectedStderr); 46 }); 47 }); 48} 49