assert: differentiate cases where `cause` is `undefined` or missing · nodejs/node@301844e · GitHub
Skip to content

Commit 301844e

Browse files
aduh95ruyadorno
authored andcommitted
assert: differentiate cases where cause is undefined or missing
PR-URL: #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>
1 parent 89ccd3e commit 301844e

3 files changed

Lines changed: 52 additions & 5 deletions

File tree

lib/internal/assert/assertion_error.js

Lines changed: 3 additions & 2 deletions

lib/internal/util/comparisons.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const {
2727

2828
const { compare } = internalBinding('buffer');
2929
const assert = require('internal/assert');
30+
const { isError } = require('internal/util');
3031
const types = require('internal/util/types');
3132
const {
3233
isAnyArrayBuffer,
@@ -232,10 +233,10 @@ function innerDeepEqual(val1, val2, strict, memos) {
232233
if (!isAnyArrayBuffer(val2) || !areEqualArrayBuffers(val1, val2)) {
233234
return false;
234235
}
235-
} else if (isNativeError(val1) || val1 instanceof Error) {
236+
} else if (isError(val1)) {
236237
// Do not compare the stack as it might differ even though the error itself
237238
// is otherwise identical.
238-
if (!isNativeError(val2) && !(val2 instanceof Error)) {
239+
if (!isError(val2)) {
239240
return false;
240241
}
241242

@@ -249,7 +250,9 @@ function innerDeepEqual(val1, val2, strict, memos) {
249250
(name1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'name') ||
250251
(!name1Enumerable && val1.name !== val2.name)) ||
251252
(cause1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'cause') ||
252-
(!cause1Enumerable && !innerDeepEqual(val1.cause, val2.cause, strict, memos))) ||
253+
(!cause1Enumerable && (
254+
ObjectPrototypeHasOwnProperty(val1, 'cause') !== ObjectPrototypeHasOwnProperty(val2, 'cause') ||
255+
!innerDeepEqual(val1.cause, val2.cause, strict, memos)))) ||
253256
(errors1Enumerable !== ObjectPrototypePropertyIsEnumerable(val2, 'errors') ||
254257
(!errors1Enumerable && !innerDeepEqual(val1.errors, val2.errors, strict, memos)))) {
255258
return false;

test/parallel/test-assert-deep-with-error.js

Lines changed: 43 additions & 0 deletions

0 commit comments

Comments
 (0)