From d89a32be0604a31bdec84f3992084fe3b394b957 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Mon, 4 Feb 2019 16:10:33 -0800 Subject: [PATCH] test: add util.isDeepStrictEqual edge case tests Test for deep strict equality when prototype and toStringTag have been modified in surprising ways. --- test/parallel/test-util-isDeepStrictEqual.js | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/parallel/test-util-isDeepStrictEqual.js b/test/parallel/test-util-isDeepStrictEqual.js index 0eb75e46eb4e98..08a30a28dbc573 100644 --- a/test/parallel/test-util-isDeepStrictEqual.js +++ b/test/parallel/test-util-isDeepStrictEqual.js @@ -449,6 +449,31 @@ assert.strictEqual( notUtilIsDeepStrict(boxedSymbol, {}); utilIsDeepStrict(Object(BigInt(1)), Object(BigInt(1))); notUtilIsDeepStrict(Object(BigInt(1)), Object(BigInt(2))); + + const booleanish = new Boolean(true); + Object.defineProperty(booleanish, Symbol.toStringTag, { value: 'String' }); + Object.setPrototypeOf(booleanish, String.prototype); + notUtilIsDeepStrict(booleanish, new String('true')); + + const numberish = new Number(42); + Object.defineProperty(numberish, Symbol.toStringTag, { value: 'String' }); + Object.setPrototypeOf(numberish, String.prototype); + notUtilIsDeepStrict(numberish, new String('42')); + + const stringish = new String('0'); + Object.defineProperty(stringish, Symbol.toStringTag, { value: 'Number' }); + Object.setPrototypeOf(stringish, Number.prototype); + notUtilIsDeepStrict(stringish, new Number(0)); + + const bigintish = new Object(BigInt(42)); + Object.defineProperty(bigintish, Symbol.toStringTag, { value: 'String' }); + Object.setPrototypeOf(bigintish, String.prototype); + notUtilIsDeepStrict(bigintish, new String('42')); + + const symbolish = new Object(Symbol('fhqwhgads')); + Object.defineProperty(symbolish, Symbol.toStringTag, { value: 'String' }); + Object.setPrototypeOf(symbolish, String.prototype); + notUtilIsDeepStrict(symbolish, new String('fhqwhgads')); } // Minus zero