mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
assert: differentiate cases where cause
is undefined
or missing
PR-URL: https://github.com/nodejs/node/pull/55738 Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
979526fd99
commit
6af5c4e2b4
@ -9,6 +9,7 @@ const {
|
|||||||
ObjectAssign,
|
ObjectAssign,
|
||||||
ObjectDefineProperty,
|
ObjectDefineProperty,
|
||||||
ObjectGetPrototypeOf,
|
ObjectGetPrototypeOf,
|
||||||
|
ObjectPrototypeHasOwnProperty,
|
||||||
String,
|
String,
|
||||||
StringPrototypeRepeat,
|
StringPrototypeRepeat,
|
||||||
StringPrototypeSlice,
|
StringPrototypeSlice,
|
||||||
@ -49,8 +50,8 @@ function copyError(source) {
|
|||||||
__proto__: null,
|
__proto__: null,
|
||||||
value: source.message,
|
value: source.message,
|
||||||
});
|
});
|
||||||
if (source.cause !== undefined) {
|
if (ObjectPrototypeHasOwnProperty(source, 'cause')) {
|
||||||
let cause = source.cause;
|
let { cause } = source;
|
||||||
|
|
||||||
if (isError(cause)) {
|
if (isError(cause)) {
|
||||||
cause = copyError(cause);
|
cause = copyError(cause);
|
||||||
|
@ -28,6 +28,7 @@ const {
|
|||||||
const { compare } = internalBinding('buffer');
|
const { compare } = internalBinding('buffer');
|
||||||
const assert = require('internal/assert');
|
const assert = require('internal/assert');
|
||||||
const { isURL } = require('internal/url');
|
const { isURL } = require('internal/url');
|
||||||
|
const { isError } = require('internal/util');
|
||||||
const types = require('internal/util/types');
|
const types = require('internal/util/types');
|
||||||
const {
|
const {
|
||||||
isAnyArrayBuffer,
|
isAnyArrayBuffer,
|
||||||
@ -235,10 +236,10 @@ function innerDeepEqual(val1, val2, strict, memos) {
|
|||||||
if (!isAnyArrayBuffer(val2) || !areEqualArrayBuffers(val1, val2)) {
|
if (!isAnyArrayBuffer(val2) || !areEqualArrayBuffers(val1, val2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (isNativeError(val1) || val1 instanceof Error) {
|
} else if (isError(val1)) {
|
||||||
// Do not compare the stack as it might differ even though the error itself
|
// Do not compare the stack as it might differ even though the error itself
|
||||||
// is otherwise identical.
|
// is otherwise identical.
|
||||||
if (!isNativeError(val2) && !(val2 instanceof Error)) {
|
if (!isError(val2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,7 +253,9 @@ function innerDeepEqual(val1, val2, strict, memos) {
|
|||||||
(name1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'name') ||
|
(name1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'name') ||
|
||||||
(!name1Enumerable && val1.name !== val2.name)) ||
|
(!name1Enumerable && val1.name !== val2.name)) ||
|
||||||
(cause1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'cause') ||
|
(cause1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'cause') ||
|
||||||
(!cause1Enumerable && !innerDeepEqual(val1.cause, val2.cause, strict, memos))) ||
|
(!cause1Enumerable && (
|
||||||
|
ObjectPrototypeHasOwnProperty(val1, 'cause') !== ObjectPrototypeHasOwnProperty(val2, 'cause') ||
|
||||||
|
!innerDeepEqual(val1.cause, val2.cause, strict, memos)))) ||
|
||||||
(errors1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'errors') ||
|
(errors1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'errors') ||
|
||||||
(!errors1Enumerable && !innerDeepEqual(val1.errors, val2.errors, strict, memos)))) {
|
(!errors1Enumerable && !innerDeepEqual(val1.errors, val2.errors, strict, memos)))) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -8,6 +8,12 @@ const defaultStartMessage = 'Expected values to be strictly deep-equal:\n' +
|
|||||||
'\n';
|
'\n';
|
||||||
|
|
||||||
test('Handle error causes', () => {
|
test('Handle error causes', () => {
|
||||||
|
assert.deepStrictEqual(new Error('a', { cause: new Error('x') }), new Error('a', { cause: new Error('x') }));
|
||||||
|
assert.deepStrictEqual(
|
||||||
|
new Error('a', { cause: new RangeError('x') }),
|
||||||
|
new Error('a', { cause: new RangeError('x') }),
|
||||||
|
);
|
||||||
|
|
||||||
assert.throws(() => {
|
assert.throws(() => {
|
||||||
assert.deepStrictEqual(new Error('a', { cause: new Error('x') }), new Error('a', { cause: new Error('y') }));
|
assert.deepStrictEqual(new Error('a', { cause: new Error('x') }), new Error('a', { cause: new Error('y') }));
|
||||||
}, { message: defaultStartMessage + ' [Error: a] {\n' +
|
}, { message: defaultStartMessage + ' [Error: a] {\n' +
|
||||||
@ -15,6 +21,13 @@ test('Handle error causes', () => {
|
|||||||
'- [cause]: [Error: y]\n' +
|
'- [cause]: [Error: y]\n' +
|
||||||
' }\n' });
|
' }\n' });
|
||||||
|
|
||||||
|
assert.throws(() => {
|
||||||
|
assert.deepStrictEqual(new Error('a', { cause: new Error('x') }), new Error('a', { cause: new TypeError('x') }));
|
||||||
|
}, { message: defaultStartMessage + ' [Error: a] {\n' +
|
||||||
|
'+ [cause]: [Error: x]\n' +
|
||||||
|
'- [cause]: [TypeError: x]\n' +
|
||||||
|
' }\n' });
|
||||||
|
|
||||||
assert.throws(() => {
|
assert.throws(() => {
|
||||||
assert.deepStrictEqual(new Error('a'), new Error('a', { cause: new Error('y') }));
|
assert.deepStrictEqual(new Error('a'), new Error('a', { cause: new Error('y') }));
|
||||||
}, { message: defaultStartMessage + '+ [Error: a]\n' +
|
}, { message: defaultStartMessage + '+ [Error: a]\n' +
|
||||||
@ -37,3 +50,33 @@ test('Handle error causes', () => {
|
|||||||
new Error('a', { cause: { prop: 'a different value' } })
|
new Error('a', { cause: { prop: 'a different value' } })
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Handle undefined causes', () => {
|
||||||
|
assert.deepStrictEqual(new Error('a', { cause: undefined }), new Error('a', { cause: undefined }));
|
||||||
|
|
||||||
|
assert.notDeepStrictEqual(new Error('a', { cause: 'undefined' }), new Error('a', { cause: undefined }));
|
||||||
|
assert.notDeepStrictEqual(new Error('a', { cause: undefined }), new Error('a'));
|
||||||
|
assert.notDeepStrictEqual(new Error('a'), new Error('a', { cause: undefined }));
|
||||||
|
|
||||||
|
assert.throws(() => {
|
||||||
|
assert.deepStrictEqual(new Error('a'), new Error('a', { cause: undefined }));
|
||||||
|
}, { message: defaultStartMessage +
|
||||||
|
'+ [Error: a]\n' +
|
||||||
|
'- [Error: a] {\n' +
|
||||||
|
'- [cause]: undefined\n' +
|
||||||
|
'- }\n' });
|
||||||
|
|
||||||
|
assert.throws(() => {
|
||||||
|
assert.deepStrictEqual(new Error('a', { cause: undefined }), new Error('a'));
|
||||||
|
}, { message: defaultStartMessage +
|
||||||
|
'+ [Error: a] {\n' +
|
||||||
|
'+ [cause]: undefined\n' +
|
||||||
|
'+ }\n' +
|
||||||
|
'- [Error: a]\n' });
|
||||||
|
assert.throws(() => {
|
||||||
|
assert.deepStrictEqual(new Error('a', { cause: undefined }), new Error('a', { cause: 'undefined' }));
|
||||||
|
}, { message: defaultStartMessage + ' [Error: a] {\n' +
|
||||||
|
'+ [cause]: undefined\n' +
|
||||||
|
'- [cause]: \'undefined\'\n' +
|
||||||
|
' }\n' });
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user