lib, test: add duplicate symbol checking in E()
Add duplicate symbol checking in E() to avoid potential confusing result. Increase coverage of internal/errors. PR-URL: https://github.com/nodejs/node/pull/11829 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
This commit is contained in:
parent
5bd1642dd1
commit
b5eccc4c7e
@ -60,6 +60,8 @@ function message(key, args) {
|
||||
// Utility function for registering the error codes. Only used here. Exported
|
||||
// *only* to allow for testing.
|
||||
function E(sym, val) {
|
||||
const assert = lazyAssert();
|
||||
assert(messages.has(sym) === false, `Error symbol: ${sym} was already used.`);
|
||||
messages.set(sym, typeof val === 'function' ? val : String(val));
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ const err1 = new errors.Error('TEST_ERROR_1', 'test');
|
||||
const err2 = new errors.TypeError('TEST_ERROR_1', 'test');
|
||||
const err3 = new errors.RangeError('TEST_ERROR_1', 'test');
|
||||
const err4 = new errors.Error('TEST_ERROR_2', 'abc', 'xyz');
|
||||
const err5 = new errors.Error('TEST_ERROR_1');
|
||||
|
||||
assert(err1 instanceof Error);
|
||||
assert.strictEqual(err1.name, 'Error[TEST_ERROR_1]');
|
||||
@ -33,6 +34,11 @@ assert.strictEqual(err4.name, 'Error[TEST_ERROR_2]');
|
||||
assert.strictEqual(err4.message, 'abc xyz');
|
||||
assert.strictEqual(err4.code, 'TEST_ERROR_2');
|
||||
|
||||
assert(err5 instanceof Error);
|
||||
assert.strictEqual(err5.name, 'Error[TEST_ERROR_1]');
|
||||
assert.strictEqual(err5.message, 'Error for testing purposes: %s');
|
||||
assert.strictEqual(err5.code, 'TEST_ERROR_1');
|
||||
|
||||
assert.throws(
|
||||
() => new errors.Error('TEST_FOO_KEY'),
|
||||
/^AssertionError: An invalid error message key was used: TEST_FOO_KEY.$/);
|
||||
@ -118,3 +124,9 @@ assert.throws(() => {
|
||||
type: TypeError,
|
||||
message: /^Error for testing 2/ }));
|
||||
}, /AssertionError: .+ does not match \S/);
|
||||
|
||||
assert.doesNotThrow(() => errors.E('TEST_ERROR_USED_SYMBOL'));
|
||||
assert.throws(
|
||||
() => errors.E('TEST_ERROR_USED_SYMBOL'),
|
||||
/^AssertionError: Error symbol: TEST_ERROR_USED_SYMBOL was already used\.$/
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user