assert: add deep equal check for more Error type · nodejs/node@0f5716c · GitHub
Skip to content

Commit 0f5716c

Browse files
kylo5abytargos
authored andcommitted
assert: add deep equal check for more Error type
PR-URL: #51805 Fixes: #51793 Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent 5db4c54 commit 0f5716c

3 files changed

Lines changed: 51 additions & 7 deletions

File tree

doc/api/assert.md

Lines changed: 11 additions & 4 deletions

lib/internal/util/comparisons.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,23 @@ function innerDeepEqual(val1, val2, strict, memos) {
235235
} else if (isNativeError(val1) || val1 instanceof Error) {
236236
// Do not compare the stack as it might differ even though the error itself
237237
// is otherwise identical.
238-
if ((!isNativeError(val2) && !(val2 instanceof Error)) ||
239-
val1.message !== val2.message ||
240-
val1.name !== val2.name) {
238+
if (!isNativeError(val2) && !(val2 instanceof Error)) {
239+
return false;
240+
}
241+
242+
const message1Enumerable = ObjectPrototypePropertyIsEnumerable(val1, 'message');
243+
const name1Enumerable = ObjectPrototypePropertyIsEnumerable(val1, 'name');
244+
const cause1Enumerable = ObjectPrototypePropertyIsEnumerable(val1, 'cause');
245+
const errors1Enumerable = ObjectPrototypePropertyIsEnumerable(val1, 'errors');
246+
247+
if ((message1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'message') ||
248+
(!message1Enumerable && val1.message !== val2.message)) ||
249+
(name1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'name') ||
250+
(!name1Enumerable && val1.name !== val2.name)) ||
251+
(cause1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'cause') ||
252+
(!cause1Enumerable && !innerDeepEqual(val1.cause, val2.cause, strict, memos))) ||
253+
(errors1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'errors') ||
254+
(!errors1Enumerable && !innerDeepEqual(val1.errors, val2.errors, strict, memos)))) {
241255
return false;
242256
}
243257
} else if (isBoxedPrimitive(val1)) {

test/parallel/test-assert-deep.js

Lines changed: 23 additions & 0 deletions

0 commit comments

Comments
 (0)