Skip to content

Commit

Permalink
errors: add useOriginalName to internal/errors
Browse files Browse the repository at this point in the history
This allows us to tell the type of the errors without using
instanceof, which is necessary in WPT harness.
  • Loading branch information
joyeecheung committed Sep 14, 2018
1 parent 90c9368 commit dd18873
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
10 changes: 9 additions & 1 deletion lib/internal/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,13 +151,18 @@ function makeSystemErrorWithCode(key) {
};
}

let useOriginalName = false;

function makeNodeErrorWithCode(Base, key) {
return class NodeError extends Base {
constructor(...args) {
super(getMessage(key, args));
}

get name() {
if (useOriginalName) {
return super.name;
}
return `${super.name} [${key}]`;
}

Expand Down Expand Up @@ -437,7 +442,10 @@ module.exports = {
getMessage,
SystemError,
codes,
E // This is exported only to facilitate testing.
// These are exported only to facilitate testing.
E,
get useOriginalName() { return useOriginalName; },
set useOriginalName(value) { useOriginalName = value; }
};

// To declare an error message, use the E(sym, val, def) function above. The sym
Expand Down
30 changes: 30 additions & 0 deletions test/parallel/test-internal-error-original-names.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Flags: --expose-internals

'use strict';

require('../common');
const assert = require('assert');
const errors = require('internal/errors');


errors.E('TEST_ERROR_1', 'Error for testing purposes: %s',
Error);
{
const err = new errors.codes.TEST_ERROR_1('test');
assert(err instanceof Error);
assert.strictEqual(err.name, 'Error [TEST_ERROR_1]');
}

{
errors.useOriginalName = true;
const err = new errors.codes.TEST_ERROR_1('test');
assert(err instanceof Error);
assert.strictEqual(err.name, 'Error');
}

{
errors.useOriginalName = false;
const err = new errors.codes.TEST_ERROR_1('test');
assert(err instanceof Error);
assert.strictEqual(err.name, 'Error [TEST_ERROR_1]');
}

0 comments on commit dd18873

Please sign in to comment.