Browse Source

throw from stdout.end and stderr.end

v0.7.4-release
Igor Zinkovsky 13 years ago
parent
commit
13324bf844
  1. 2
      lib/stream.js
  2. 10
      src/node.js
  3. 17
      test/simple/test-tty-stdout-end.js

2
lib/stream.js

@ -54,7 +54,7 @@ Stream.prototype.pipe = function(dest, options) {
// If the 'end' option is not supplied, dest.end() will be called when // If the 'end' option is not supplied, dest.end() will be called when
// source gets the 'end' or 'close' events. Only dest.end() once, and // source gets the 'end' or 'close' events. Only dest.end() once, and
// only when all sources have ended. // only when all sources have ended.
if (!options || options.end !== false) { if (!dest._isStdio && (!options || options.end !== false)) {
dest._pipeCount = dest._pipeCount || 0; dest._pipeCount = dest._pipeCount || 0;
dest._pipeCount++; dest._pipeCount++;

10
src/node.js

@ -269,6 +269,8 @@
// For supporting legacy API we put the FD here. // For supporting legacy API we put the FD here.
stream.fd = fd; stream.fd = fd;
stream._isStdio = true;
return stream; return stream;
} }
@ -278,14 +280,18 @@
process.__defineGetter__('stdout', function() { process.__defineGetter__('stdout', function() {
if (stdout) return stdout; if (stdout) return stdout;
stdout = createWritableStdioStream(1); stdout = createWritableStdioStream(1);
stdout.end = stdout.destroy = stdout.destroySoon = function() { }; stdout.end = stdout.destroy = stdout.destroySoon = function() {
throw new Error('process.stdout cannot be closed');
};
return stdout; return stdout;
}); });
process.__defineGetter__('stderr', function() { process.__defineGetter__('stderr', function() {
if (stderr) return stderr; if (stderr) return stderr;
stderr = createWritableStdioStream(2); stderr = createWritableStdioStream(2);
stderr.end = stderr.destroy = stderr.destroySoon = function() { }; stderr.end = stderr.destroy = stderr.destroySoon = function() {
throw new Error('process.stderr cannot be closed');
};
return stderr; return stderr;
}); });

17
test/simple/test-tty-stdout-end.js

@ -22,14 +22,15 @@
// Can't test this when 'make test' doesn't assign a tty to the stdout. // Can't test this when 'make test' doesn't assign a tty to the stdout.
var common = require('../common'); var common = require('../common');
var assert = require('assert'); var assert = require('assert');
var tty = require('tty');
var closed = false; var exceptionCaught = false;
process.stdout.on('close', function() {
closed = true;
});
process.on('exit', function() {
assert.ok(closed);
});
try {
process.stdout.end(); process.stdout.end();
} catch(e) {
exceptionCaught = true;
assert.ok(common.isError(e));
assert.equal('process.stdout cannot be closed', e.message);
}
assert.ok(exceptionCaught);

Loading…
Cancel
Save