Skip to content

Commit

Permalink
console: fixup console.dir() error handling
Browse files Browse the repository at this point in the history
Apply the `console: do not emit error events` changes properly
to `console.dir()`.

This was overlooked in f18e08d
(#9744).

Ref: f18e08d#commitcomment-20934407
PR-URL: #11443
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
addaleax committed Feb 21, 2017
1 parent 1934686 commit c969047
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 50 deletions.
5 changes: 4 additions & 1 deletion lib/console.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,10 @@ Console.prototype.error = Console.prototype.warn;

Console.prototype.dir = function dir(object, options) {
options = Object.assign({customInspect: false}, options);
write(this._ignoreErrors, this._stdout, `${util.inspect(object, options)}\n`);
write(this._ignoreErrors,
this._stdout,
`${util.inspect(object, options)}\n`,
this._stdoutErrorHandler);
};


Expand Down
20 changes: 11 additions & 9 deletions test/parallel/test-console-async-write-error.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ 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'));
})
});
for (const method of ['dir', 'log', 'warn']) {
const out = new Writable({
write: common.mustCall((chunk, enc, callback) => {
process.nextTick(callback, new Error('foobar'));
})
});

const c = new Console(out, out, true);
const c = new Console(out, out, true);

assert.doesNotThrow(() => {
c.log('abc');
});
assert.doesNotThrow(() => {
c[method]('abc');
});
}
82 changes: 42 additions & 40 deletions test/parallel/test-console-sync-write-error.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,46 @@ 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');
});
for (const method of ['dir', 'log', 'warn']) {
{
const out = new Writable({
write: common.mustCall((chunk, enc, callback) => {
callback(new Error('foobar'));
})
});

const c = new Console(out, out, true);

assert.doesNotThrow(() => {
c[method]('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[method]('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[method]('abc');
});
}
}

0 comments on commit c969047

Please sign in to comment.