'use strict';
// Flags: --expose_internals
const common = require('../common');
const assert = require('assert');
const cp = require('child_process');

if (process.argv[2] === 'child') {
  setTimeout(() => {}, common.platformTimeout(100));
  return;
}

// Monkey patch spawn() to create a child process normally, but destroy the
// stdout and stderr streams. This replicates the conditions where the streams
// cannot be properly created.
const ChildProcess = require('internal/child_process').ChildProcess;
const original = ChildProcess.prototype.spawn;

ChildProcess.prototype.spawn = function() {
  const err = original.apply(this, arguments);

  this.stdout.destroy();
  this.stderr.destroy();
  this.stdout = null;
  this.stderr = null;

  return err;
};

function createChild(options, callback) {
  const cmd = `"${process.execPath}" "${__filename}" child`;

  return cp.exec(cmd, options, common.mustCall(callback));
}

// Verify that normal execution of a child process is handled.
{
  createChild({}, (err, stdout, stderr) => {
    assert.strictEqual(err, null);
    assert.strictEqual(stdout, '');
    assert.strictEqual(stderr, '');
  });
}

// Verify that execution with an error event is handled.
{
  const error = new Error('foo');
  const child = createChild({}, (err, stdout, stderr) => {
    assert.strictEqual(err, error);
    assert.strictEqual(stdout, '');
    assert.strictEqual(stderr, '');
  });

  child.emit('error', error);
}

// Verify that execution with a killed process is handled.
{
  createChild({ timeout: 1 }, (err, stdout, stderr) => {
    assert.strictEqual(err.killed, true);
    assert.strictEqual(stdout, '');
    assert.strictEqual(stderr, '');
  });
}
