assert,util: compare RegExp.lastIndex while using deep equal checks
Compare the `lastIndex` property of regular expressions next to the flags and source property. Fixes: https://github.com/nodejs/node/issues/28766 Signed-off-by: Ruben Bridgewater <ruben@bridgewater.de> PR-URL: https://github.com/nodejs/node/pull/41020 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
This commit is contained in:
parent
34fdea1c57
commit
dab8ab2837
@ -465,6 +465,9 @@ An alias of [`assert.ok()`][].
|
||||
<!-- YAML
|
||||
added: v0.1.21
|
||||
changes:
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/41020
|
||||
description: Regular expressions lastIndex property is now compared as well.
|
||||
- version:
|
||||
- v16.0.0
|
||||
- v14.18.0
|
||||
@ -539,6 +542,8 @@ are also recursively evaluated by the following rules.
|
||||
objects.
|
||||
* [`Symbol`][] properties are not compared.
|
||||
* [`WeakMap`][] and [`WeakSet`][] comparison does not rely on their values.
|
||||
* [`RegExp`][] lastIndex, flags and source are always compared, even if these
|
||||
are not enumerable properties.
|
||||
|
||||
The following example does not throw an [`AssertionError`][] because the
|
||||
primitives are considered equal by the [Abstract Equality Comparison][]
|
||||
@ -642,6 +647,9 @@ parameter is an instance of an [`Error`][] then it will be thrown instead of the
|
||||
<!-- YAML
|
||||
added: v1.2.0
|
||||
changes:
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/41020
|
||||
description: Regular expressions lastIndex property is now compared as well.
|
||||
- version: v9.0.0
|
||||
pr-url: https://github.com/nodejs/node/pull/15169
|
||||
description: Enumerable symbol properties are now compared.
|
||||
@ -697,6 +705,8 @@ are recursively evaluated also by the following rules.
|
||||
reference.
|
||||
* [`WeakMap`][] and [`WeakSet`][] comparison does not rely on their values. See
|
||||
below for further details.
|
||||
* [`RegExp`][] lastIndex, flags and source are always compared, even if these
|
||||
are not enumerable properties.
|
||||
|
||||
```mjs
|
||||
import assert from 'assert/strict';
|
||||
|
@ -63,7 +63,9 @@ const kIsMap = 3;
|
||||
|
||||
// Check if they have the same source and flags
|
||||
function areSimilarRegExps(a, b) {
|
||||
return a.source === b.source && a.flags === b.flags;
|
||||
return a.source === b.source &&
|
||||
a.flags === b.flags &&
|
||||
a.lastIndex === b.lastIndex;
|
||||
}
|
||||
|
||||
function areSimilarFloatArrays(a, b) {
|
||||
|
@ -712,7 +712,7 @@ assertNotDeepOrStrict(/a/igm, /a/im);
|
||||
{
|
||||
const re1 = /a/g;
|
||||
re1.lastIndex = 3;
|
||||
assert.deepEqual(re1, /a/g);
|
||||
assert.notDeepEqual(re1, /a/g);
|
||||
}
|
||||
|
||||
assert.deepEqual(4, '4');
|
||||
@ -852,7 +852,7 @@ assert.throws(
|
||||
{
|
||||
const re1 = /a/;
|
||||
re1.lastIndex = 3;
|
||||
assert.deepStrictEqual(re1, /a/);
|
||||
assert.notDeepStrictEqual(re1, /a/);
|
||||
}
|
||||
|
||||
assert.throws(
|
||||
|
Loading…
x
Reference in New Issue
Block a user