summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-12-02 13:02:48 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2019-12-07 00:40:53 +0100
commitb4d48c05167f27f0b1e6d7d8432ea3ffb05014a6 (patch)
tree902f98e88f65c689aa5b81f42d61315bae1cd14d /test
parente11b909097e44a7acc77cf5f6e8be3016d3d4f6f (diff)
downloadandroid-node-v8-b4d48c05167f27f0b1e6d7d8432ea3ffb05014a6.tar.gz
android-node-v8-b4d48c05167f27f0b1e6d7d8432ea3ffb05014a6.tar.bz2
android-node-v8-b4d48c05167f27f0b1e6d7d8432ea3ffb05014a6.zip
assert,util: stricter type comparison using deep equal comparisons
This veryfies that both input arguments are always of the identical type. It was possible to miss a few cases before. This change applies to all deep equal assert functions (e.g., `assert.deepStrictEqual()`) and to `util.isDeepStrictEqual()`. PR-URL: https://github.com/nodejs/node/pull/30764 Refs: https://github.com/nodejs/node/pull/30743 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-assert-deep.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/parallel/test-assert-deep.js b/test/parallel/test-assert-deep.js
index 87f2a5f44f..1cddb47692 100644
--- a/test/parallel/test-assert-deep.js
+++ b/test/parallel/test-assert-deep.js
@@ -1123,3 +1123,69 @@ assert.throws(
// The descriptor is not compared.
assertDeepAndStrictEqual(a, { a: 5 });
}
+
+// Verify object types being identical on both sides.
+{
+ let a = Buffer.from('test');
+ let b = Object.create(
+ Object.getPrototypeOf(a),
+ Object.getOwnPropertyDescriptors(a)
+ );
+ Object.defineProperty(b, Symbol.toStringTag, {
+ value: 'Uint8Array'
+ });
+ assertNotDeepOrStrict(a, b);
+
+ a = new Uint8Array(10);
+ b = new Int8Array(10);
+ Object.defineProperty(b, Symbol.toStringTag, {
+ value: 'Uint8Array'
+ });
+ Object.setPrototypeOf(b, Uint8Array.prototype);
+ assertNotDeepOrStrict(a, b);
+
+ a = [1, 2, 3];
+ b = { 0: 1, 1: 2, 2: 3 };
+ Object.setPrototypeOf(b, Array.prototype);
+ Object.defineProperty(b, 'length', { value: 3, enumerable: false });
+ Object.defineProperty(b, Symbol.toStringTag, {
+ value: 'Array'
+ });
+ assertNotDeepOrStrict(a, b);
+
+ a = new Date(2000);
+ b = Object.create(
+ Object.getPrototypeOf(a),
+ Object.getOwnPropertyDescriptors(a)
+ );
+ Object.defineProperty(b, Symbol.toStringTag, {
+ value: 'Date'
+ });
+ assertNotDeepOrStrict(a, b);
+
+ a = /abc/g;
+ b = Object.create(
+ Object.getPrototypeOf(a),
+ Object.getOwnPropertyDescriptors(a)
+ );
+ Object.defineProperty(b, Symbol.toStringTag, {
+ value: 'RegExp'
+ });
+ assertNotDeepOrStrict(a, b);
+
+ a = [];
+ b = /abc/;
+ Object.setPrototypeOf(b, Array.prototype);
+ Object.defineProperty(b, Symbol.toStringTag, {
+ value: 'Array'
+ });
+ assertNotDeepOrStrict(a, b);
+
+ a = Object.create(null);
+ b = new RangeError('abc');
+ Object.defineProperty(a, Symbol.toStringTag, {
+ value: 'Error'
+ });
+ Object.setPrototypeOf(b, null);
+ assertNotDeepOrStrict(a, b, assert.AssertionError);
+}