From f18e08d820dde161788d95a5603546ceca021e90 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 22 Nov 2016 18:21:43 +0100 Subject: console: do not emit error events Fixes: https://github.com/nodejs/node/issues/831 Fixes: https://github.com/nodejs/node/issues/947 Ref: https://github.com/nodejs/node/pull/9470 PR-URL: https://github.com/nodejs/node/pull/9744 Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- .../test-process-external-stdio-close.js | 23 ----------- test/parallel/test-console-async-write-error.js | 17 ++++++++ test/parallel/test-console-sync-write-error.js | 47 ++++++++++++++++++++++ test/parallel/test-process-external-stdio-close.js | 23 +++++++++++ 4 files changed, 87 insertions(+), 23 deletions(-) delete mode 100644 test/known_issues/test-process-external-stdio-close.js create mode 100644 test/parallel/test-console-async-write-error.js create mode 100644 test/parallel/test-console-sync-write-error.js create mode 100644 test/parallel/test-process-external-stdio-close.js (limited to 'test') diff --git a/test/known_issues/test-process-external-stdio-close.js b/test/known_issues/test-process-external-stdio-close.js deleted file mode 100644 index 79e3641bdf..0000000000 --- a/test/known_issues/test-process-external-stdio-close.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; -// Refs: https://github.com/nodejs/node/issues/947 -const common = require('../common'); -const assert = require('assert'); -const cp = require('child_process'); - -if (process.argv[2] === 'child') { - process.on('message', common.mustCall((msg) => { - assert.strictEqual(msg, 'go'); - console.log('logging should not cause a crash'); - process.disconnect(); - })); -} else { - const child = cp.fork(__filename, ['child'], {silent: true}); - - child.on('close', common.mustCall((exitCode, signal) => { - assert.strictEqual(exitCode, 0); - assert.strictEqual(signal, null); - })); - - child.stdout.destroy(); - child.send('go'); -} diff --git a/test/parallel/test-console-async-write-error.js b/test/parallel/test-console-async-write-error.js new file mode 100644 index 0000000000..0fcd72868a --- /dev/null +++ b/test/parallel/test-console-async-write-error.js @@ -0,0 +1,17 @@ +'use strict'; +const common = require('../common'); +const { Console } = require('console'); +const { Writable } = require('stream'); +const assert = require('assert'); + +const out = new Writable({ + write: common.mustCall((chunk, enc, callback) => { + process.nextTick(callback, new Error('foobar')); + }) +}); + +const c = new Console(out, out, true); + +assert.doesNotThrow(() => { + c.log('abc'); +}); diff --git a/test/parallel/test-console-sync-write-error.js b/test/parallel/test-console-sync-write-error.js new file mode 100644 index 0000000000..34ff8bad8c --- /dev/null +++ b/test/parallel/test-console-sync-write-error.js @@ -0,0 +1,47 @@ +'use strict'; +const common = require('../common'); +const { Console } = require('console'); +const { Writable } = require('stream'); +const assert = require('assert'); + +{ + const out = new Writable({ + write: common.mustCall((chunk, enc, callback) => { + callback(new Error('foobar')); + }) + }); + + const c = new Console(out, out, true); + + assert.doesNotThrow(() => { + c.log('abc'); + }); +} + +{ + const out = new Writable({ + write: common.mustCall((chunk, enc, callback) => { + throw new Error('foobar'); + }) + }); + + const c = new Console(out, out, true); + + assert.doesNotThrow(() => { + c.log('abc'); + }); +} + +{ + const out = new Writable({ + write: common.mustCall((chunk, enc, callback) => { + setImmediate(() => callback(new Error('foobar'))); + }) + }); + + const c = new Console(out, out, true); + + assert.doesNotThrow(() => { + c.log('abc'); + }); +} diff --git a/test/parallel/test-process-external-stdio-close.js b/test/parallel/test-process-external-stdio-close.js new file mode 100644 index 0000000000..79e3641bdf --- /dev/null +++ b/test/parallel/test-process-external-stdio-close.js @@ -0,0 +1,23 @@ +'use strict'; +// Refs: https://github.com/nodejs/node/issues/947 +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); + +if (process.argv[2] === 'child') { + process.on('message', common.mustCall((msg) => { + assert.strictEqual(msg, 'go'); + console.log('logging should not cause a crash'); + process.disconnect(); + })); +} else { + const child = cp.fork(__filename, ['child'], {silent: true}); + + child.on('close', common.mustCall((exitCode, signal) => { + assert.strictEqual(exitCode, 0); + assert.strictEqual(signal, null); + })); + + child.stdout.destroy(); + child.send('go'); +} -- cgit v1.2.1