1'use strict';
2const common = require('../common');
3const cp = require('child_process');
4const assert = require('assert');
5
6// Windows' `echo` command is a built-in shell command and not an external
7// executable like on *nix
8const opts = { shell: common.isWindows };
9
10const p = cp.spawn('echo', [], opts);
11
12p.on('close', common.mustCall((code, signal) => {
13  assert.strictEqual(code, 0);
14  assert.strictEqual(signal, null);
15  spawnWithReadable();
16}));
17
18p.stdout.read();
19
20const spawnWithReadable = () => {
21  const buffer = [];
22  const p = cp.spawn('echo', ['123'], opts);
23  p.on('close', common.mustCall((code, signal) => {
24    assert.strictEqual(code, 0);
25    assert.strictEqual(signal, null);
26    assert.strictEqual(Buffer.concat(buffer).toString().trim(), '123');
27  }));
28  p.stdout.on('readable', () => {
29    let buf;
30    while ((buf = p.stdout.read()) !== null)
31      buffer.push(buf);
32  });
33};
34