Skip to content

Commit ffb2522

Browse files
khirayamaljharb
authored andcommitted
[Breaking] ensure Error objects compare properly
1 parent 0c25e94 commit ffb2522

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

.eslintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"files": ["example/**", "test/**"],
1717
"rules": {
1818
"array-bracket-newline": 0,
19+
"max-lines": 0,
1920
"max-params": 0,
2021
"max-statements": 0,
2122
"no-console": 0,

index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function isBuffer(x) {
5050
}
5151

5252
function objEquiv(a, b, opts) {
53-
/* eslint max-statements: [2, 50] */
53+
/* eslint max-statements: [2, 70] */
5454
var i, key;
5555
if (typeof a !== typeof b) { return false; }
5656
if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }
@@ -60,6 +60,14 @@ function objEquiv(a, b, opts) {
6060

6161
if (isArguments(a) !== isArguments(b)) { return false; }
6262

63+
// TODO: replace when a cross-realm brand check is available
64+
var aIsError = a instanceof Error;
65+
var bIsError = b instanceof Error;
66+
if (aIsError !== bIsError) { return false; }
67+
if (aIsError || bIsError) {
68+
if (a.name !== b.name || a.message !== b.message) { return false; }
69+
}
70+
6371
var aIsRegex = isRegex(a);
6472
var bIsRegex = isRegex(b);
6573
if (aIsRegex !== bIsRegex) { return false; }

test/cmp.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,3 +342,11 @@ test('functions', function (t) {
342342

343343
t.end();
344344
});
345+
346+
test('Errors', function (t) {
347+
t.deepEqualTest(new Error('xyz'), new Error('xyz'), 'two errors of the same type with the same message', true, true, false);
348+
t.deepEqualTest(new Error('xyz'), new TypeError('xyz'), 'two errors of different types with the same message', false, false);
349+
t.deepEqualTest(new Error('xyz'), new Error('zyx'), 'two errors of the same type with a different message', false, false);
350+
351+
t.end();
352+
});

0 commit comments

Comments
 (0)