Skip to content

Commit dfd0215

Browse files
tniessentargos
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 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 3805b80 commit dfd0215

45 files changed

Lines changed: 114 additions & 110 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎test/.eslintrc.yaml‎

Lines 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'])"

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function createBase64URL(mime, body) {
1515
constplainESMURL=createURL('text/javascript',body);
1616
constns=awaitimport(plainESMURL);
1717
assert.deepStrictEqual(Object.keys(ns),['default']);
18-
assert.deepStrictEqual(ns.default.a,'aaa');
18+
assert.strictEqual(ns.default.a,'aaa');
1919
constimporterOfURL=createURL(
2020
'text/javascript',
2121
`export {default as default} from ${JSON.stringify(plainESMURL)}`
@@ -35,40 +35,40 @@ function createBase64URL(mime, body) {
3535
constplainESMURL=createURL('text/javascript',body);
3636
constns=awaitimport(plainESMURL);
3737
assert.deepStrictEqual(Object.keys(ns),['default']);
38-
assert.deepStrictEqual(ns.default,plainESMURL);
38+
assert.strictEqual(ns.default,plainESMURL);
3939
}
4040
{
4141
constbody='export default import.meta.url;';
4242
constplainESMURL=createURL('text/javascript;charset=UTF-8',body);
4343
constns=awaitimport(plainESMURL);
4444
assert.deepStrictEqual(Object.keys(ns),['default']);
45-
assert.deepStrictEqual(ns.default,plainESMURL);
45+
assert.strictEqual(ns.default,plainESMURL);
4646
}
4747
{
4848
constbody='export default import.meta.url;';
4949
constplainESMURL=createURL('text/javascript;charset="UTF-8"',body);
5050
constns=awaitimport(plainESMURL);
5151
assert.deepStrictEqual(Object.keys(ns),['default']);
52-
assert.deepStrictEqual(ns.default,plainESMURL);
52+
assert.strictEqual(ns.default,plainESMURL);
5353
}
5454
{
5555
constbody='export default import.meta.url;';
5656
constplainESMURL=createURL('text/javascript;;a=a;b=b;;',body);
5757
constns=awaitimport(plainESMURL);
5858
assert.deepStrictEqual(Object.keys(ns),['default']);
59-
assert.deepStrictEqual(ns.default,plainESMURL);
59+
assert.strictEqual(ns.default,plainESMURL);
6060
}
6161
{
6262
constns=awaitimport('data:application/json;foo="test,"this"');
6363
assert.deepStrictEqual(Object.keys(ns),['default']);
64-
assert.deepStrictEqual(ns.default,'this');
64+
assert.strictEqual(ns.default,'this');
6565
}
6666
{
6767
constns=awaitimport(`data:application/json;foo=${
6868
encodeURIComponent('test,')
6969
},0`);
7070
assert.deepStrictEqual(Object.keys(ns),['default']);
71-
assert.deepStrictEqual(ns.default,0);
71+
assert.strictEqual(ns.default,0);
7272
}
7373
{
7474
awaitassert.rejects(async()=>{
@@ -83,14 +83,14 @@ function createBase64URL(mime, body) {
8383
constplainESMURL=createURL('application/json',body);
8484
constns=awaitimport(plainESMURL);
8585
assert.deepStrictEqual(Object.keys(ns),['default']);
86-
assert.deepStrictEqual(ns.default.x,1);
86+
assert.strictEqual(ns.default.x,1);
8787
}
8888
{
8989
constbody='{"default": 2}';
9090
constplainESMURL=createURL('application/json',body);
9191
constns=awaitimport(plainESMURL);
9292
assert.deepStrictEqual(Object.keys(ns),['default']);
93-
assert.deepStrictEqual(ns.default.default,2);
93+
assert.strictEqual(ns.default.default,2);
9494
}
9595
{
9696
constbody='null';

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

Lines 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(newNumber(0),test.toObject(0));
119119
assert.deepStrictEqual(newNumber(Number.NaN),test.toObject(Number.NaN));
120120
assert.deepStrictEqual(newObject(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(''),'');

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,11 +856,13 @@ assert.throws(
856856
}
857857

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

863864
assert.throws(
865+
// eslint-disable-next-line no-restricted-syntax
864866
()=>assert.deepStrictEqual(true,1),
865867
{message: `${defaultMsgStart}\ntrue !== 1\n`}
866868
);

‎test/parallel/test-assert.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,6 +1243,7 @@ assert.throws(
12431243
{
12441244
letthrew=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;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,8 @@ assert.strictEqual(
422422
}
423423
{
424424
consth=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
consth=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

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

Lines 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

‎test/parallel/test-dns.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,10 @@ assert.throws(() => {
336336

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

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

Lines 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(newDynamicError());
67-
assert.deepStrictEqual(called,true);
67+
assert.strictEqual(called,true);
6868
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async function validateFilePermission() {
1919
constfileHandle=awaitopen(filePath,'w+',0o444);
2020
// File created with r--r--r-- 444
2121
conststatsBeforeMod=fs.statSync(filePath);
22-
assert.deepStrictEqual(statsBeforeMod.mode&0o444,0o444);
22+
assert.strictEqual(statsBeforeMod.mode&0o444,0o444);
2323

2424
letexpectedAccess;
2525
constnewPermissions=0o765;

0 commit comments

Comments
 (0)