errors: add useOriginalName to internal/errors
This allows us to tell the type of the errors without using instanceof, which is necessary in WPT harness. PR-URL: https://github.com/nodejs/node/pull/22556 Reviewed-By: John-David Dalton <john.david.dalton@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
ab5f789e3f
commit
e692a09802
@ -151,6 +151,8 @@ function makeSystemErrorWithCode(key) {
|
||||
};
|
||||
}
|
||||
|
||||
let useOriginalName = false;
|
||||
|
||||
function makeNodeErrorWithCode(Base, key) {
|
||||
return class NodeError extends Base {
|
||||
constructor(...args) {
|
||||
@ -158,6 +160,9 @@ function makeNodeErrorWithCode(Base, key) {
|
||||
}
|
||||
|
||||
get name() {
|
||||
if (useOriginalName) {
|
||||
return super.name;
|
||||
}
|
||||
return `${super.name} [${key}]`;
|
||||
}
|
||||
|
||||
@ -437,7 +442,12 @@ module.exports = {
|
||||
getMessage,
|
||||
SystemError,
|
||||
codes,
|
||||
E // This is exported only to facilitate testing.
|
||||
// This is exported only to facilitate testing.
|
||||
E,
|
||||
// This allows us to tell the type of the errors without using
|
||||
// instanceof, which is necessary in WPT harness.
|
||||
get useOriginalName() { return useOriginalName; },
|
||||
set useOriginalName(value) { useOriginalName = value; }
|
||||
};
|
||||
|
||||
// To declare an error message, use the E(sym, val, def) function above. The sym
|
||||
|
35
test/parallel/test-internal-error-original-names.js
Normal file
35
test/parallel/test-internal-error-original-names.js
Normal file
@ -0,0 +1,35 @@
|
||||
// Flags: --expose-internals
|
||||
|
||||
'use strict';
|
||||
|
||||
// This tests `internal/errors.useOriginalName`
|
||||
// This testing feature is needed to allows us to assert the types of
|
||||
// errors without using instanceof, which is necessary in WPT harness.
|
||||
// Refs: https://github.com/nodejs/node/pull/22556
|
||||
|
||||
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]');
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user