Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 23fc205

Browse filesBrowse files
tniessendanielleadams
authored andcommitted
test: avoid deep comparisons with literals
Comparing any value to any non-RegExp literal or undefined using strictEqual (or notStrictEqual) passes if and only if deepStrictEqual (or notDeepStrictEqual, respectively) passes. Unnecessarily using deep comparisons adds confusion. This patch adds an ESLint rule that forbids the use of deepStrictEqual and notDeepStrictEqual when the expected value (i.e., the second argument) is a non-RegExp literal or undefined. For reference, an ESTree literal is defined as follows. extend interface Literal <: Expression { type: "Literal"; value: string | boolean | null | number | RegExp | bigint; } The value `undefined` is an `Identifier` with `name: 'undefined'`. PR-URL: #40634 Backport-PR-URL: #42021 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Voltrex <mohammadkeyvanzade94@gmail.com>
1 parent 74c0464 commit 23fc205
Copy full SHA for 23fc205

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Dismiss banner
Expand file treeCollapse file tree

42 files changed

+111
-107
lines changed
Open diff view settings
Collapse file

‎test/.eslintrc.yaml‎

Copy file name to clipboardExpand all lines: test/.eslintrc.yaml
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ rules:
1313
no-restricted-syntax:
1414
# Config copied from .eslintrc.js
1515
- error
16+
- selector: "CallExpression:matches([callee.name='deepStrictEqual'], [callee.property.name='deepStrictEqual']):matches([arguments.1.type='Literal']:not([arguments.1.regex]), [arguments.1.type='Identifier'][arguments.1.name='undefined'])"
17+
message: "Use strictEqual instead of deepStrictEqual for literals or undefined."
18+
- selector: "CallExpression:matches([callee.name='notDeepStrictEqual'], [callee.property.name='notDeepStrictEqual']):matches([arguments.1.type='Literal']:not([arguments.1.regex]), [arguments.1.type='Identifier'][arguments.1.name='undefined'])"
19+
message: "Use notStrictEqual instead of notDeepStrictEqual for literals or undefined."
1620
- selector: "CallExpression:matches([callee.name='deepStrictEqual'], [callee.property.name='deepStrictEqual'])[arguments.2.type='Literal']"
1721
message: "Do not use a literal for the third argument of assert.deepStrictEqual()"
1822
- selector: "CallExpression:matches([callee.name='doesNotThrow'], [callee.property.name='doesNotThrow'])"
Collapse file

‎test/es-module/test-esm-data-urls.js‎

Copy file name to clipboardExpand all lines: test/es-module/test-esm-data-urls.js
+9-9Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function createBase64URL(mime, body) {
1515
const plainESMURL = createURL('text/javascript', body);
1616
const ns = await import(plainESMURL);
1717
assert.deepStrictEqual(Object.keys(ns), ['default']);
18-
assert.deepStrictEqual(ns.default.a, 'aaa');
18+
assert.strictEqual(ns.default.a, 'aaa');
1919
const importerOfURL = createURL(
2020
'text/javascript',
2121
`export {default as default} from ${JSON.stringify(plainESMURL)}`
@@ -35,41 +35,41 @@ function createBase64URL(mime, body) {
3535
const plainESMURL = createURL('text/javascript', body);
3636
const ns = await import(plainESMURL);
3737
assert.deepStrictEqual(Object.keys(ns), ['default']);
38-
assert.deepStrictEqual(ns.default, plainESMURL);
38+
assert.strictEqual(ns.default, plainESMURL);
3939
}
4040
{
4141
const body = 'export default import.meta.url;';
4242
const plainESMURL = createURL('text/javascript;charset=UTF-8', body);
4343
const ns = await import(plainESMURL);
4444
assert.deepStrictEqual(Object.keys(ns), ['default']);
45-
assert.deepStrictEqual(ns.default, plainESMURL);
45+
assert.strictEqual(ns.default, plainESMURL);
4646
}
4747
{
4848
const body = 'export default import.meta.url;';
4949
const plainESMURL = createURL('text/javascript;charset="UTF-8"', body);
5050
const ns = await import(plainESMURL);
5151
assert.deepStrictEqual(Object.keys(ns), ['default']);
52-
assert.deepStrictEqual(ns.default, plainESMURL);
52+
assert.strictEqual(ns.default, plainESMURL);
5353
}
5454
{
5555
const body = 'export default import.meta.url;';
5656
const plainESMURL = createURL('text/javascript;;a=a;b=b;;', body);
5757
const ns = await import(plainESMURL);
5858
assert.deepStrictEqual(Object.keys(ns), ['default']);
59-
assert.deepStrictEqual(ns.default, plainESMURL);
59+
assert.strictEqual(ns.default, plainESMURL);
6060
}
6161
{
6262
const ns = await import('data:application/json;foo="test,"this"',
6363
{ assert: { type: 'json' } });
6464
assert.deepStrictEqual(Object.keys(ns), ['default']);
65-
assert.deepStrictEqual(ns.default, 'this');
65+
assert.strictEqual(ns.default, 'this');
6666
}
6767
{
6868
const ns = await import(`data:application/json;foo=${
6969
encodeURIComponent('test,')
7070
},0`, { assert: { type: 'json' } });
7171
assert.deepStrictEqual(Object.keys(ns), ['default']);
72-
assert.deepStrictEqual(ns.default, 0);
72+
assert.strictEqual(ns.default, 0);
7373
}
7474
{
7575
await assert.rejects(async () =>
@@ -84,14 +84,14 @@ function createBase64URL(mime, body) {
8484
const plainESMURL = createURL('application/json', body);
8585
const ns = await import(plainESMURL, { assert: { type: 'json' } });
8686
assert.deepStrictEqual(Object.keys(ns), ['default']);
87-
assert.deepStrictEqual(ns.default.x, 1);
87+
assert.strictEqual(ns.default.x, 1);
8888
}
8989
{
9090
const body = '{"default": 2}';
9191
const plainESMURL = createURL('application/json', body);
9292
const ns = await import(plainESMURL, { assert: { type: 'json' } });
9393
assert.deepStrictEqual(Object.keys(ns), ['default']);
94-
assert.deepStrictEqual(ns.default.default, 2);
94+
assert.strictEqual(ns.default.default, 2);
9595
}
9696
{
9797
const body = 'null';
Collapse file

‎test/js-native-api/test_conversions/test.js‎

Copy file name to clipboardExpand all lines: test/js-native-api/test_conversions/test.js
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,10 @@ assert.deepStrictEqual(new String(''), test.toObject(''));
118118
assert.deepStrictEqual(new Number(0), test.toObject(0));
119119
assert.deepStrictEqual(new Number(Number.NaN), test.toObject(Number.NaN));
120120
assert.deepStrictEqual(new Object(testSym), test.toObject(testSym));
121-
assert.notDeepStrictEqual(test.toObject(false), false);
122-
assert.notDeepStrictEqual(test.toObject(true), true);
123-
assert.notDeepStrictEqual(test.toObject(''), '');
124-
assert.notDeepStrictEqual(test.toObject(0), 0);
121+
assert.notStrictEqual(test.toObject(false), false);
122+
assert.notStrictEqual(test.toObject(true), true);
123+
assert.notStrictEqual(test.toObject(''), '');
124+
assert.notStrictEqual(test.toObject(0), 0);
125125
assert.ok(!Number.isNaN(test.toObject(Number.NaN)));
126126

127127
assert.strictEqual(test.toString(''), '');
Collapse file

‎test/parallel/test-assert-deep.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-assert-deep.js
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,11 +858,13 @@ assert.throws(
858858
}
859859

860860
assert.throws(
861+
// eslint-disable-next-line no-restricted-syntax
861862
() => assert.deepStrictEqual(4, '4'),
862863
{ message: `${defaultMsgStart}\n4 !== '4'\n` }
863864
);
864865

865866
assert.throws(
867+
// eslint-disable-next-line no-restricted-syntax
866868
() => assert.deepStrictEqual(true, 1),
867869
{ message: `${defaultMsgStart}\ntrue !== 1\n` }
868870
);
Collapse file

‎test/parallel/test-assert.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-assert.js
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,6 +1243,7 @@ assert.throws(
12431243
{
12441244
let threw = false;
12451245
try {
1246+
// eslint-disable-next-line no-restricted-syntax
12461247
assert.deepStrictEqual(Array(100).fill(1), 'foobar');
12471248
} catch (err) {
12481249
threw = true;
Collapse file

‎test/parallel/test-crypto-hmac.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-crypto-hmac.js
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,8 @@ assert.strictEqual(
422422
}
423423
{
424424
const h = crypto.createHmac('sha1', 'key').update('data');
425-
assert.deepStrictEqual(h.digest('latin1'), expected);
426-
assert.deepStrictEqual(h.digest('latin1'), '');
425+
assert.strictEqual(h.digest('latin1'), expected);
426+
assert.strictEqual(h.digest('latin1'), '');
427427
}
428428
}
429429

@@ -440,8 +440,8 @@ assert.strictEqual(
440440
}
441441
{
442442
const h = crypto.createHmac('sha1', 'key');
443-
assert.deepStrictEqual(h.digest('latin1'), expected);
444-
assert.deepStrictEqual(h.digest('latin1'), '');
443+
assert.strictEqual(h.digest('latin1'), expected);
444+
assert.strictEqual(h.digest('latin1'), '');
445445
}
446446
}
447447

Collapse file

‎test/parallel/test-dns-lookup.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-dns-lookup.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ dns.lookup('127.0.0.1', {
137137
family: 4,
138138
all: false
139139
}, common.mustSucceed((result, addressType) => {
140-
assert.deepStrictEqual(result, '127.0.0.1');
140+
assert.strictEqual(result, '127.0.0.1');
141141
assert.strictEqual(addressType, 4);
142142
}));
143143

Collapse file

‎test/parallel/test-dns.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-dns.js
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -337,10 +337,10 @@ assert.throws(() => {
337337

338338
{
339339
dns.resolveMx('foo.onion', function(err) {
340-
assert.deepStrictEqual(err.code, 'ENOTFOUND');
341-
assert.deepStrictEqual(err.syscall, 'queryMx');
342-
assert.deepStrictEqual(err.hostname, 'foo.onion');
343-
assert.deepStrictEqual(err.message, 'queryMx ENOTFOUND foo.onion');
340+
assert.strictEqual(err.code, 'ENOTFOUND');
341+
assert.strictEqual(err.syscall, 'queryMx');
342+
assert.strictEqual(err.hostname, 'foo.onion');
343+
assert.strictEqual(err.message, 'queryMx ENOTFOUND foo.onion');
344344
});
345345
}
346346

Collapse file

‎test/parallel/test-error-serdes.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-error-serdes.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,5 @@ assert.strictEqual(cycle(Function), '[Function: Function]');
6464
}
6565

6666
serializeError(new DynamicError());
67-
assert.deepStrictEqual(called, true);
67+
assert.strictEqual(called, true);
6868
}
Collapse file

‎test/parallel/test-fs-promises-file-handle-chmod.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-fs-promises-file-handle-chmod.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async function validateFilePermission() {
1919
const fileHandle = await open(filePath, 'w+', 0o444);
2020
// File created with r--r--r-- 444
2121
const statsBeforeMod = fs.statSync(filePath);
22-
assert.deepStrictEqual(statsBeforeMod.mode & 0o444, 0o444);
22+
assert.strictEqual(statsBeforeMod.mode & 0o444, 0o444);
2323

2424
let expectedAccess;
2525
const newPermissions = 0o765;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.