Skip to content

Commit

Permalink
errors: migrate lib/console
Browse files Browse the repository at this point in the history
Migrate console.js to use internal/errors.js.

PR-URL: #11340
Ref: #11273
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
  • Loading branch information
mskec authored and fhinkel committed May 27, 2017
1 parent ae5e65c commit 0ecdf29
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 10 deletions.
7 changes: 7 additions & 0 deletions doc/api/errors.md
Expand Up @@ -570,6 +570,13 @@ The `'ERR_ARG_NOT_ITERABLE'` error code is used generically to identify that an
iterable argument (i.e. a value that works with `for...of` loops) is required,
but not provided to a Node.js API.

<a id="ERR_CONSOLE_WRITABLE_STREAM"></a>
### ERR_CONSOLE_WRITABLE_STREAM

The `ERR_CONSOLE_WRITABLE_STREAM` error code is thrown when `Console` is
instantiated without `stdout` stream or when `stdout` or `stderr` streams
are not writable.

<a id="ERR_INVALID_ARG_TYPE"></a>
### ERR_INVALID_ARG_TYPE

Expand Down
5 changes: 3 additions & 2 deletions lib/console.js
Expand Up @@ -21,19 +21,20 @@

'use strict';

const errors = require('internal/errors');
const util = require('util');

function Console(stdout, stderr, ignoreErrors = true) {
if (!(this instanceof Console)) {
return new Console(stdout, stderr, ignoreErrors);
}
if (!stdout || typeof stdout.write !== 'function') {
throw new TypeError('Console expects a writable stream instance');
throw new errors.TypeError('ERR_CONSOLE_WRITABLE_STREAM', 'stdout');
}
if (!stderr) {
stderr = stdout;
} else if (typeof stderr.write !== 'function') {
throw new TypeError('Console expects writable stream instances');
throw new errors.TypeError('ERR_CONSOLE_WRITABLE_STREAM', 'stderr');
}

var prop = {
Expand Down
2 changes: 2 additions & 0 deletions lib/internal/errors.js
Expand Up @@ -112,6 +112,8 @@ module.exports = exports = {
// Note: Please try to keep these in alphabetical order
E('ERR_ARG_NOT_ITERABLE', '%s must be iterable');
E('ERR_ASSERTION', (msg) => msg);
E('ERR_CONSOLE_WRITABLE_STREAM',
(name) => `Console expects a writable stream instance for ${name}`);
E('ERR_INVALID_ARG_TYPE', invalidArgType);
E('ERR_INVALID_CALLBACK', 'callback must be a function');
E('ERR_INVALID_FILE_URL_HOST', 'File URL host %s');
Expand Down
28 changes: 20 additions & 8 deletions test/parallel/test-console-instance.js
Expand Up @@ -37,16 +37,28 @@ assert.strictEqual('function', typeof Console);

// make sure that the Console constructor throws
// when not given a writable stream instance
assert.throws(() => {
new Console();
}, /^TypeError: Console expects a writable stream instance$/);
assert.throws(
() => { new Console(); },
common.expectsError({
code: 'ERR_CONSOLE_WRITABLE_STREAM',
type: TypeError,
message: /stdout/
})
);

// Console constructor should throw if stderr exists but is not writable
assert.throws(() => {
out.write = common.noop;
err.write = undefined;
new Console(out, err);
}, /^TypeError: Console expects writable stream instances$/);
assert.throws(
() => {
out.write = common.noop;
err.write = undefined;
new Console(out, err);
},
common.expectsError({
code: 'ERR_CONSOLE_WRITABLE_STREAM',
type: TypeError,
message: /stderr/
})
);

out.write = err.write = (d) => {};

Expand Down

0 comments on commit 0ecdf29

Please sign in to comment.