function ChildProcess () {
- process.EventEmitter.call(this);
+ EventEmitter.call(this);
var self = this;
var stdout = this.stdout = new Stream();
var stderr = this.stderr = new Stream();
- stderr.onend = stdout.onend = function () {
+ function onClose () {
if (gotCHLD && !stdout.readable && !stderr.readable) {
self.emit('exit', exitCode, termSignal);
}
- };
+ }
+
+ stderr.addListener('close', onClose);
+ stdout.addListener('close', onClose);
internal.onexit = function (code, signal) {
gotCHLD = true;
require("../common");
-var spawn = require('child_process').spawn
- , path = require('path')
- , sub = path.join(fixturesDir, 'exit.js')
- , child = spawn(process.argv[0], [sub, 23])
- ;
+spawn = require('child_process').spawn,
+path = require('path');
-child.addListener('exit', function(code, signal) {
+exits = 0;
+
+exitScript = path.join(fixturesDir, 'exit.js')
+exitChild = spawn(process.argv[0], [exitScript, 23]);
+exitChild.addListener('exit', function(code, signal) {
assert.strictEqual(code, 23);
assert.strictEqual(signal, null);
-});
\ No newline at end of file
+
+ exits++;
+});
+
+
+
+errorScript = path.join(fixturesDir, 'child_process_should_emit_error.js')
+errorChild = spawn(process.argv[0], [errorScript]);
+errorChild.addListener('exit', function(code, signal) {
+ assert.ok(code !== 0);
+ assert.strictEqual(signal, null);
+
+ exits++;
+});
+
+
+process.addListener('exit', function () {
+ assert.equal(2, exits);
+});