Prefer assert.compareArray over assert.deepEqual when comparing arrays

This commit is contained in:
André Bargull 2025-04-30 14:16:08 +02:00 committed by Philip Chimento
parent bc544479c8
commit 69e5cd3607
32 changed files with 125 additions and 136 deletions

View File

@ -6,7 +6,7 @@
/*--- /*---
flags: flags:
- onlyStrict - onlyStrict
includes: [deepEqual.js] includes: [compareArray.js]
description: | description: |
pending pending
esid: pending esid: pending
@ -34,7 +34,7 @@ for (let value of primitives) {
}); });
let x = [1, 2].concat(value); let x = [1, 2].concat(value);
assert.deepEqual(x, [1, 2, value]); assert.compareArray(x, [1, 2, value]);
delete prototype[Symbol.isConcatSpreadable]; delete prototype[Symbol.isConcatSpreadable];
delete prototype.length; delete prototype.length;

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -22,14 +22,14 @@ Object.defineProperty(Array.prototype, 1, {
}, },
}); });
assert.deepEqual([].toSpliced(0, 0, 1), [1]); assert.compareArray([].toSpliced(0, 0, 1), [1]);
assert.deepEqual([0].toSpliced(0, 0, 0), [0, 0]); assert.compareArray([0].toSpliced(0, 0, 0), [0, 0]);
assert.deepEqual([0].toSpliced(0, 0, 1), [1, 0]); assert.compareArray([0].toSpliced(0, 0, 1), [1, 0]);
assert.deepEqual([0].toSpliced(0, 1, 0), [0]); assert.compareArray([0].toSpliced(0, 1, 0), [0]);
assert.deepEqual([0].toSpliced(0, 1, 1), [1]); assert.compareArray([0].toSpliced(0, 1, 1), [1]);
assert.deepEqual([0].toSpliced(1, 0, 0), [0, 0]); assert.compareArray([0].toSpliced(1, 0, 0), [0, 0]);
assert.deepEqual([0].toSpliced(1, 0, 1), [0, 1]); assert.compareArray([0].toSpliced(1, 0, 1), [0, 1]);
assert.deepEqual([0].toSpliced(1, 1, 0), [0, 0]); assert.compareArray([0].toSpliced(1, 1, 0), [0, 0]);
assert.deepEqual([0].toSpliced(1, 1, 1), [0, 1]); assert.compareArray([0].toSpliced(1, 1, 1), [0, 1]);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -17,9 +17,8 @@ Object.defineProperty(Array.prototype, 0, {
}); });
// Single element case. // Single element case.
assert.deepEqual([0].with(0, 1), [1]); assert.compareArray([0].with(0, 1), [1]);
// More than one element. // More than one element.
assert.deepEqual([1, 2].with(0, 3), [3, 2]); assert.compareArray([1, 2].with(0, 3), [3, 2]);
assert.deepEqual([1, 2].with(1, 3), [1, 3]); assert.compareArray([1, 2].with(1, 3), [1, 3]);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -58,8 +58,8 @@ for (let [ctor, answer] of tests) {
logs.length = 0; logs.length = 0;
let buf = arr.buffer.slice(8, 16); let buf = arr.buffer.slice(8, 16);
assert.sameValue(buf.constructor, MyArrayBuffer); assert.sameValue(buf.constructor, MyArrayBuffer);
assert.deepEqual(logs, ["get @@species", "get ctor.prototype", "call ctor"]); assert.compareArray(logs, ["get @@species", "get ctor.prototype", "call ctor"]);
assert.deepEqual([...new ctor(buf)], answer); assert.compareArray([...new ctor(buf)], answer);
// modified @@species // modified @@species
@ -69,7 +69,7 @@ for (let [ctor, answer] of tests) {
}; };
let b = a.slice(8, 16); let b = a.slice(8, 16);
assert.sameValue(b.constructor, MyArrayBuffer); assert.sameValue(b.constructor, MyArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
class MyArrayBufferWithSpecies extends ArrayBuffer { class MyArrayBufferWithSpecies extends ArrayBuffer {
get [Symbol.species]() { get [Symbol.species]() {
@ -80,7 +80,7 @@ for (let [ctor, answer] of tests) {
a.constructor = MyArrayBufferWithSpecies; a.constructor = MyArrayBufferWithSpecies;
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, MyArrayBufferWithSpecies); assert.sameValue(b.constructor, MyArrayBufferWithSpecies);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
// no @@species // no @@species
a = arr.buffer; a = arr.buffer;
@ -89,7 +89,7 @@ for (let [ctor, answer] of tests) {
}; };
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, ArrayBuffer); assert.sameValue(b.constructor, ArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
a = arr.buffer; a = arr.buffer;
a.constructor = { a.constructor = {
@ -97,7 +97,7 @@ for (let [ctor, answer] of tests) {
}; };
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, ArrayBuffer); assert.sameValue(b.constructor, ArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
// invalid @@species // invalid @@species
for (let species of [0, 1.1, true, false, "a", /a/, Symbol.iterator, [], {}]) { for (let species of [0, 1.1, true, false, "a", /a/, Symbol.iterator, [], {}]) {
@ -113,7 +113,7 @@ for (let [ctor, answer] of tests) {
a.constructor = undefined; a.constructor = undefined;
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, ArrayBuffer); assert.sameValue(b.constructor, ArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
// invalid constructor // invalid constructor
for (let ctor of [null, 0, 1.1, true, false, "a", Symbol.iterator]) { for (let ctor of [null, 0, 1.1, true, false, "a", Symbol.iterator]) {
@ -131,7 +131,7 @@ for (let [ctor, answer] of tests) {
}; };
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, g.MyArrayBuffer); assert.sameValue(b.constructor, g.MyArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
a = arr.buffer; a = arr.buffer;
a.constructor = { a.constructor = {
@ -139,7 +139,7 @@ for (let [ctor, answer] of tests) {
}; };
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, g.ArrayBuffer); assert.sameValue(b.constructor, g.ArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
// constructor from different global // constructor from different global
g.eval(` g.eval(`
@ -153,7 +153,7 @@ var MyArrayBufferWithSpecies = class MyArrayBufferWithSpecies extends ArrayBuffe
a.constructor = g.MyArrayBufferWithSpecies; a.constructor = g.MyArrayBufferWithSpecies;
b = a.slice(8, 16); b = a.slice(8, 16);
assert.sameValue(b.constructor, g.MyArrayBufferWithSpecies); assert.sameValue(b.constructor, g.MyArrayBufferWithSpecies);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
g.eval(` g.eval(`
var arr = new ${ctor.name}([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); var arr = new ${ctor.name}([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
@ -161,12 +161,12 @@ var a = arr.buffer;
`); `);
b = ArrayBuffer.prototype.slice.call(g.a, 8, 16); b = ArrayBuffer.prototype.slice.call(g.a, 8, 16);
assert.sameValue(b.constructor, g.ArrayBuffer); assert.sameValue(b.constructor, g.ArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
// running in different global // running in different global
b = g.a.slice(8, 16); b = g.a.slice(8, 16);
assert.sameValue(b.constructor, g.ArrayBuffer); assert.sameValue(b.constructor, g.ArrayBuffer);
assert.deepEqual([...new ctor(b)], answer); assert.compareArray([...new ctor(b)], answer);
// subclasses // subclasses
// not-modified @@species // not-modified @@species

View File

@ -2,13 +2,14 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
var objects = [ var objects = [
Math.sin.bind(null), Math.sin.bind(null),
new Proxy(Math.sin.bind(null), {}), new Proxy(Math.sin.bind(null), {}),
@ -17,8 +18,8 @@ var objects = [
for (var obj of objects) { for (var obj of objects) {
// Target is not constructable, so a new array should be created internally. // Target is not constructable, so a new array should be created internally.
assert.deepEqual(Array.from.call(obj, [1, 2, 3]), [1, 2, 3]); assert.compareArray(Array.from.call(obj, [1, 2, 3]), [1, 2, 3]);
assert.deepEqual(Array.of.call(obj, 1, 2, 3), [1, 2, 3]); assert.compareArray(Array.of.call(obj, 1, 2, 3), [1, 2, 3]);
// Make sure they are callable, but not constructable. // Make sure they are callable, but not constructable.
obj(); obj();

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [compareArray.js, deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -95,9 +95,9 @@ esid: pending
function assertIsRawJson(rawJson, expectedRawJsonValue) { function assertIsRawJson(rawJson, expectedRawJsonValue) {
assert.sameValue(null, Object.getPrototypeOf(rawJson)); assert.sameValue(null, Object.getPrototypeOf(rawJson));
assert.sameValue(true, Object.hasOwn(rawJson, 'rawJSON')); assert.sameValue(true, Object.hasOwn(rawJson, 'rawJSON'));
assert.deepEqual(['rawJSON'], Object.keys(rawJson)); assert.compareArray(['rawJSON'], Object.keys(rawJson));
assert.deepEqual(['rawJSON'], Object.getOwnPropertyNames(rawJson)); assert.compareArray(['rawJSON'], Object.getOwnPropertyNames(rawJson));
assert.deepEqual([], Object.getOwnPropertySymbols(rawJson)); assert.compareArray([], Object.getOwnPropertySymbols(rawJson));
assert.sameValue(expectedRawJsonValue, rawJson.rawJSON); assert.sameValue(expectedRawJsonValue, rawJson.rawJSON);
} }
@ -117,7 +117,7 @@ esid: pending
var p = JSON.rawJSON(false); var p = JSON.rawJSON(false);
var obj = { a: "hi" }; var obj = { a: "hi" };
Object.setPrototypeOf(obj, p); Object.setPrototypeOf(obj, p);
assert.deepEqual(obj.rawJSON, "false"); assert.sameValue(obj.rawJSON, "false");
})(); })();
(function checkErrorsComeFromCorrectRealm() { (function checkErrorsComeFromCorrectRealm() {

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -19,5 +19,5 @@ var p = new Proxy(fun, {
}); });
assert.sameValue(new fun instanceof p, true); assert.sameValue(new fun instanceof p, true);
assert.deepEqual(get, [Symbol.hasInstance, "prototype"]); assert.compareArray(get, [Symbol.hasInstance, "prototype"]);

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [sm/non262-shell.js, sm/non262-Reflect-shell.js, deepEqual.js] includes: [sm/non262-shell.js, sm/non262-Reflect-shell.js, compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -66,14 +66,10 @@ function getArgs(...args) {
return args; return args;
} }
for (var method of BOTH) { for (var method of BOTH) {
assert.deepEqual(method(getArgs, undefined, {length: 0}), assert.compareArray(method(getArgs, undefined, {length: 0}), []);
[]); assert.compareArray(method(getArgs, undefined, {length: 1, "0": "zero"}), ["zero"]);
assert.deepEqual(method(getArgs, undefined, {length: 1, "0": "zero"}), assert.compareArray(method(getArgs, undefined, {length: 2}), [undefined, undefined]);
["zero"]); assert.compareArray(method(getArgs, undefined, function (a, b, c) {}), [undefined, undefined, undefined]);
assert.deepEqual(method(getArgs, undefined, {length: 2}),
[undefined, undefined]);
assert.deepEqual(method(getArgs, undefined, function (a, b, c) {}),
[undefined, undefined, undefined]);
} }
// The Iterable/Iterator interfaces are not used. // The Iterable/Iterator interfaces are not used.
@ -85,8 +81,7 @@ var funnyArgs = {
next() { throw "FAIL 2"; } next() { throw "FAIL 2"; }
}; };
for (var method of BOTH) { for (var method of BOTH) {
assert.deepEqual(method(getArgs, undefined, funnyArgs), assert.compareArray(method(getArgs, undefined, funnyArgs), ["zero", "one"]);
["zero", "one"]);
} }
// If argumentList has no .length property, no arguments are passed. // If argumentList has no .length property, no arguments are passed.
@ -108,8 +103,7 @@ args = {
}; };
for (var method of BOTH) { for (var method of BOTH) {
log = ""; log = "";
assert.deepEqual(method(getArgs, undefined, args), assert.compareArray(method(getArgs, undefined, args), ["zero"]);
["zero"]);
assert.sameValue(log, "L0"); assert.sameValue(log, "L0");
} }

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -44,7 +44,7 @@ var cases = [
keys: Reflect.ownKeys(Math)} keys: Reflect.ownKeys(Math)}
]; ];
for (var {object, keys} of cases) for (var {object, keys} of cases)
assert.deepEqual(Reflect.ownKeys(object), keys); assert.compareArray(Reflect.ownKeys(object), keys);
// Reflect.ownKeys() creates a new array each time it is called. // Reflect.ownKeys() creates a new array each time it is called.
var object = {}, keys = []; var object = {}, keys = [];
@ -61,7 +61,7 @@ proxy = new Proxy(obj, {
ownKeys() { return keys; } ownKeys() { return keys; }
}); });
var actual = Reflect.ownKeys(proxy); var actual = Reflect.ownKeys(proxy);
assert.deepEqual(actual, keys); // we get correct answers assert.compareArray(actual, keys); // we get correct answers
assert.sameValue(actual !== keys, true); // but not the same object assert.sameValue(actual !== keys, true); // but not the same object
// If a proxy breaks invariants, a TypeError is thrown. // If a proxy breaks invariants, a TypeError is thrown.

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [sm/non262-shell.js, deepEqual.js] includes: [sm/non262-shell.js, compareArray.js, deepEqual.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -69,7 +69,7 @@ for (var {value, expected} of keys) {
var obj = {}; var obj = {};
assert.sameValue(Reflect.defineProperty(obj, value, {value: 1, configurable: true}), true); assert.sameValue(Reflect.defineProperty(obj, value, {value: 1, configurable: true}), true);
assert.deepEqual(Reflect.ownKeys(obj), [expected]); assert.compareArray(Reflect.ownKeys(obj), [expected]);
assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, value), assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, value),
{value: 1, {value: 1,
writable: false, writable: false,

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -15,11 +15,11 @@ delete RegExp.prototype.flags;
let re = /a/i; let re = /a/i;
let a = re[Symbol.split]("1a2A3a4A5"); let a = re[Symbol.split]("1a2A3a4A5");
assert.deepEqual(a, ["1", "2", "3", "4", "5"]); assert.compareArray(a, ["1", "2", "3", "4", "5"]);
delete Object.prototype.flags; delete Object.prototype.flags;
Object.prototype.flags = ""; Object.prototype.flags = "";
a = re[Symbol.split]("1a2A3a4A5"); a = re[Symbol.split]("1a2A3a4A5");
assert.deepEqual(a, ["1", "2A3", "4A5"]); assert.compareArray(a, ["1", "2A3", "4A5"]);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -11,5 +11,5 @@ esid: pending
---*/ ---*/
var obj = { flags: "", toString: () => "-" }; var obj = { flags: "", toString: () => "-" };
assert.deepEqual(RegExp.prototype[Symbol.split].call(obj, "a-b-c"), assert.compareArray(RegExp.prototype[Symbol.split].call(obj, "a-b-c"),
["a", "b", "c"]); ["a", "b", "c"]);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -20,7 +20,7 @@ function create(value) {
} }
for (let v of [null, undefined]) { for (let v of [null, undefined]) {
assert.deepEqual("a-a".split(create(v)), ["a", "a"]); assert.compareArray("a-a".split(create(v)), ["a", "a"]);
} }
for (let v of [1, true, Symbol.iterator, "", {}, []]) { for (let v of [1, true, Symbol.iterator, "", {}, []]) {

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -38,11 +38,10 @@ function test(descsObj) {
log = []; log = [];
Object.defineProperties(LoggingProxy(), descs); Object.defineProperties(LoggingProxy(), descs);
assert.sameValue(log.length, keys.length); assert.sameValue(log.length, keys.length);
assert.deepEqual(log.map(k => typeof k), ["string", "string", "string", "symbol", "symbol", "symbol"]); assert.compareArray(log.map(k => typeof k), ["string", "string", "string", "symbol", "symbol", "symbol"]);
for (var key of keys) for (var key of keys)
assert.sameValue(log.indexOf(key) !== -1, true); assert.sameValue(log.indexOf(key) !== -1, true);
} }
test(descs); test(descs);
test(new Proxy(descs, {})); test(new Proxy(descs, {}));

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -55,6 +55,5 @@ var h = {
} }
}; };
p = new Proxy({}, h); p = new Proxy({}, h);
assert.deepEqual(Object.keys(p), ["a", "0"]); assert.compareArray(Object.keys(p), ["a", "0"]);
assert.deepEqual(log, ["ownKeys", "gopd", "a", "gopd", "0"]); assert.compareArray(log, ["ownKeys", "gopd", "a", "gopd", "0"]);

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -27,8 +27,8 @@ Object.prototype[Symbol.for("comet")] = 6;
var keys = []; var keys = [];
for (var k in obj) for (var k in obj)
keys.push(k); keys.push(k);
assert.deepEqual(keys, ["x", "y", "z"]); assert.compareArray(keys, ["x", "y", "z"]);
assert.deepEqual(Object.keys(obj), ["x", "y", "z"]); assert.compareArray(Object.keys(obj), ["x", "y", "z"]);
// Test with more properties. // Test with more properties.
for (var i = 0; i < 1000; i++) for (var i = 0; i < 1000; i++)
@ -37,5 +37,4 @@ obj.w = 1000;
keys = [] keys = []
for (var k in obj) for (var k in obj)
keys.push(k); keys.push(k);
assert.deepEqual(keys, ["x", "y", "z", "w"]); assert.compareArray(keys, ["x", "y", "z", "w"]);

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -31,17 +31,16 @@ for (var i = 0; i < 9; i++) {
assert.sameValue(obj[sym] = i, i); assert.sameValue(obj[sym] = i, i);
expected.push(i); expected.push(i);
} }
assert.deepEqual(sets, expected); assert.compareArray(sets, expected);
// increment operator // increment operator
gets = 0; gets = 0;
sets = []; sets = [];
assert.sameValue(obj[sym]++, 1); assert.sameValue(obj[sym]++, 1);
assert.deepEqual(sets, [2]); assert.compareArray(sets, [2]);
// assignment // assignment
gets = 0; gets = 0;
sets = []; sets = [];
assert.sameValue(obj[sym] *= 12, 12); assert.sameValue(obj[sym] *= 12, 12);
assert.deepEqual(sets, [12]); assert.compareArray(sets, [12]);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -24,7 +24,7 @@ for (C of [Array, Map, Set, RegExp,
TypedArray, TypedArray,
ArrayBuffer]) { ArrayBuffer]) {
var desc = Object.getOwnPropertyDescriptor(C, Symbol.species); var desc = Object.getOwnPropertyDescriptor(C, Symbol.species);
assert.deepEqual(Object.keys(desc).sort(), ["configurable", "enumerable", "get", "set"]); assert.compareArray(Object.keys(desc).sort(), ["configurable", "enumerable", "get", "set"]);
assert.sameValue(desc.set, undefined); assert.sameValue(desc.set, undefined);
assert.sameValue(desc.enumerable, false); assert.sameValue(desc.enumerable, false);
assert.sameValue(desc.configurable, true); assert.sameValue(desc.configurable, true);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -33,7 +33,7 @@ const testArr = [525600, "Fred"];
class derived extends base { class derived extends base {
constructor() { super(); } constructor() { super(); }
prepForTest() { seenValues = []; } prepForTest() { seenValues = []; }
testAsserts() { assert.deepEqual(seenValues, testArr); } testAsserts() { assert.compareArray(seenValues, testArr); }
testProps() { testProps() {
this.prepForTest(); this.prepForTest();
[super.minutes, super.intendent] = testArr; [super.minutes, super.intendent] = testArr;

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -66,5 +66,4 @@ for (let exprBase of [base1, base2])
constructor() { super(); } constructor() { super(); }
test() { animals.push(super["test"]()); } test() { animals.push(super["test"]()); }
}().test(); }().test();
assert.deepEqual(animals, ["llama", "alpaca"]); assert.compareArray(animals, ["llama", "alpaca"]);

View File

@ -2,13 +2,14 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
// This file was written by Andy Wingo <wingo@igalia.com> and originally // This file was written by Andy Wingo <wingo@igalia.com> and originally
// contributed to V8 as generators-objects.js, available here: // contributed to V8 as generators-objects.js, available here:
// //
@ -24,7 +25,7 @@ function TestGeneratorObject() {
assert.sameValue(Object.getPrototypeOf(iter), g.prototype); assert.sameValue(Object.getPrototypeOf(iter), g.prototype);
assert.sameValue(iter instanceof g, true); assert.sameValue(iter instanceof g, true);
assert.sameValue(String(iter), "[object Generator]"); assert.sameValue(String(iter), "[object Generator]");
assert.deepEqual(Object.getOwnPropertyNames(iter), []); assert.compareArray(Object.getOwnPropertyNames(iter), []);
assert.notSameValue(g(), iter); assert.notSameValue(g(), iter);
} }
TestGeneratorObject(); TestGeneratorObject();

View File

@ -2,13 +2,14 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
// This file was written by Andy Wingo <wingo@igalia.com> and originally // This file was written by Andy Wingo <wingo@igalia.com> and originally
// contributed to V8 as generators-runtime.js, available here: // contributed to V8 as generators-runtime.js, available here:
// //
@ -39,7 +40,7 @@ function TestGeneratorFunctionInstance() {
f_own_property_names.sort(); f_own_property_names.sort();
g_own_property_names.sort(); g_own_property_names.sort();
assert.deepEqual(f_own_property_names, g_own_property_names); assert.compareArray(f_own_property_names, g_own_property_names);
var i; var i;
for (i = 0; i < f_own_property_names.length; i++) { for (i = 0; i < f_own_property_names.length; i++) {
var prop = f_own_property_names[i]; var prop = f_own_property_names[i];
@ -84,8 +85,8 @@ function TestGeneratorObjectPrototype() {
expected_property_names.sort(); expected_property_names.sort();
found_property_names.sort(); found_property_names.sort();
assert.deepEqual(found_property_names, expected_property_names); assert.compareArray(found_property_names, expected_property_names);
assert.deepEqual(Object.getOwnPropertySymbols(GeneratorObjectPrototype), [Symbol.toStringTag]); assert.compareArray(Object.getOwnPropertySymbols(GeneratorObjectPrototype), [Symbol.toStringTag]);
} }
TestGeneratorObjectPrototype(); TestGeneratorObjectPrototype();
@ -134,8 +135,6 @@ function TestPerGeneratorPrototype() {
assert.sameValue(g.prototype instanceof Function, false); assert.sameValue(g.prototype instanceof Function, false);
assert.sameValue(typeof (g.prototype), "object"); assert.sameValue(typeof (g.prototype), "object");
assert.deepEqual(Object.getOwnPropertyNames(g.prototype), []); assert.compareArray(Object.getOwnPropertyNames(g.prototype), []);
} }
TestPerGeneratorPrototype(); TestPerGeneratorPrototype();

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -51,7 +51,7 @@ for (var obj of testSubjects) {
// It should have performed exactly these operations on the proxy, in this // It should have performed exactly these operations on the proxy, in this
// order. See ES6 rev 24 (2014 April 27) 6.2.4.5 ToPropertyDescriptor. // order. See ES6 rev 24 (2014 April 27) 6.2.4.5 ToPropertyDescriptor.
assert.deepEqual(log, [ assert.compareArray(log, [
"has enumerable", "get enumerable", "has enumerable", "get enumerable",
"has configurable", "get configurable", "has configurable", "get configurable",
"has value", "get value", "has value", "get value",

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -29,9 +29,9 @@ function logProxy(object = {}, handler = {}) {
var {proxy, log} = logProxy(); var {proxy, log} = logProxy();
Object.freeze(proxy); Object.freeze(proxy);
assert.deepEqual(log, ["preventExtensions", "ownKeys"]); assert.compareArray(log, ["preventExtensions", "ownKeys"]);
var {proxy, log} = logProxy(); var {proxy, log} = logProxy();
Object.freeze(Object.freeze(proxy)); Object.freeze(Object.freeze(proxy));
assert.deepEqual(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]); assert.compareArray(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]);

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -31,6 +31,6 @@ function OwnKeysProxy() {
return new Proxy({}, new HandlerProxy); return new Proxy({}, new HandlerProxy);
} }
assert.deepEqual(Object.getOwnPropertySymbols(new OwnKeysProxy), symbols); assert.compareArray(Object.getOwnPropertySymbols(new OwnKeysProxy), symbols);
assert.sameValue(hits, 1); assert.sameValue(hits, 1);

View File

@ -4,14 +4,15 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
assert.deepEqual(Object.getOwnPropertySymbols({}), []);
assert.compareArray(Object.getOwnPropertySymbols({}), []);
// String keys are ignored. // String keys are ignored.
assert.sameValue(Object.getOwnPropertySymbols({a: 1, b: 2}).length, 0); assert.sameValue(Object.getOwnPropertySymbols({a: 1, b: 2}).length, 0);
@ -22,8 +23,8 @@ var iterable = {};
Object.defineProperty(iterable, Symbol.iterator, { Object.defineProperty(iterable, Symbol.iterator, {
value: () => [][Symbol.iterator]() value: () => [][Symbol.iterator]()
}); });
assert.deepEqual(Object.getOwnPropertySymbols(iterable), [Symbol.iterator]); assert.compareArray(Object.getOwnPropertySymbols(iterable), [Symbol.iterator]);
assert.deepEqual(Object.getOwnPropertySymbols(new Proxy(iterable, {})), [Symbol.iterator]); assert.compareArray(Object.getOwnPropertySymbols(new Proxy(iterable, {})), [Symbol.iterator]);
// Test on an object with a thousand own properties. // Test on an object with a thousand own properties.
var obj = {}; var obj = {};
@ -51,4 +52,3 @@ for (var primitive of [true, 1, 3.14, "hello", Symbol()])
assert.sameValue(Object.getOwnPropertySymbols(primitive).length, 0); assert.sameValue(Object.getOwnPropertySymbols(primitive).length, 0);
assert.sameValue(Object.getOwnPropertySymbols.length, 1); assert.sameValue(Object.getOwnPropertySymbols.length, 1);

View File

@ -4,7 +4,7 @@
*/ */
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -16,10 +16,10 @@ assert.throws(TypeError, () => Object.keys());
assert.throws(TypeError, () => Object.keys(undefined)); assert.throws(TypeError, () => Object.keys(undefined));
assert.throws(TypeError, () => Object.keys(null)); assert.throws(TypeError, () => Object.keys(null));
assert.deepEqual(Object.keys(1), []); assert.compareArray(Object.keys(1), []);
assert.deepEqual(Object.keys(true), []); assert.compareArray(Object.keys(true), []);
if (typeof Symbol === "function") { if (typeof Symbol === "function") {
assert.deepEqual(Object.keys(Symbol("foo")), []); assert.compareArray(Object.keys(Symbol("foo")), []);
} }
assert.deepEqual(Object.keys("foo"), ["0", "1", "2"]); assert.compareArray(Object.keys("foo"), ["0", "1", "2"]);

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -25,9 +25,9 @@ function logProxy(object = {}, handler = {}) {
var {proxy, log} = logProxy(); var {proxy, log} = logProxy();
Object.preventExtensions(proxy); Object.preventExtensions(proxy);
assert.deepEqual(log, ["preventExtensions"]); assert.compareArray(log, ["preventExtensions"]);
var {proxy, log} = logProxy(); var {proxy, log} = logProxy();
Object.preventExtensions(Object.preventExtensions(proxy)); Object.preventExtensions(Object.preventExtensions(proxy));
assert.deepEqual(log, ["preventExtensions", "preventExtensions"]); assert.compareArray(log, ["preventExtensions", "preventExtensions"]);

View File

@ -2,23 +2,24 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
var names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({foo: 0}, "foo")); var names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({foo: 0}, "foo"));
assert.deepEqual(names, ["value", "writable", "enumerable", "configurable"]); assert.compareArray(names, ["value", "writable", "enumerable", "configurable"]);
names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({get foo(){}}, "foo")); names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({get foo(){}}, "foo"));
assert.deepEqual(names, ["get", "set", "enumerable", "configurable"]); assert.compareArray(names, ["get", "set", "enumerable", "configurable"]);
var proxy = new Proxy({}, { var proxy = new Proxy({}, {
defineProperty(target, key, desc) { defineProperty(target, key, desc) {
var names = Object.getOwnPropertyNames(desc); var names = Object.getOwnPropertyNames(desc);
assert.deepEqual(names, ["set", "configurable"]); assert.compareArray(names, ["set", "configurable"]);
return true; return true;
} }
}); });

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
@ -40,30 +40,29 @@ for (var property of properties) {
var {proxy, log} = logProxy({}); var {proxy, log} = logProxy({});
var result = Object.prototype.propertyIsEnumerable.call(proxy, property); var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
assert.sameValue(result, false); assert.sameValue(result, false);
assert.deepEqual(log, [property]); assert.compareArray(log, [property]);
// Test 2: property is present on object and enumerable // Test 2: property is present on object and enumerable
var {proxy, log} = logProxy({[property]: 0}); var {proxy, log} = logProxy({[property]: 0});
var result = Object.prototype.propertyIsEnumerable.call(proxy, property); var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
assert.sameValue(result, true); assert.sameValue(result, true);
assert.deepEqual(log, [property]); assert.compareArray(log, [property]);
// Test 3: property is present on object, but not enumerable // Test 3: property is present on object, but not enumerable
var {proxy, log} = logProxy(Object.defineProperty({[property]: 0}, property, {enumerable: false})); var {proxy, log} = logProxy(Object.defineProperty({[property]: 0}, property, {enumerable: false}));
var result = Object.prototype.propertyIsEnumerable.call(proxy, property); var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
assert.sameValue(result, false); assert.sameValue(result, false);
assert.deepEqual(log, [property]); assert.compareArray(log, [property]);
// Test 4: property is present on prototype object // Test 4: property is present on prototype object
var {proxy, log} = logProxy(Object.create({[property]: 0})); var {proxy, log} = logProxy(Object.create({[property]: 0}));
var result = Object.prototype.propertyIsEnumerable.call(proxy, property); var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
assert.sameValue(result, false); assert.sameValue(result, false);
assert.deepEqual(log, [property]); assert.compareArray(log, [property]);
// Test 5: property is present on prototype object, prototype is proxy object // Test 5: property is present on prototype object, prototype is proxy object
var {proxy, log} = logProxy({[property]: 0}); var {proxy, log} = logProxy({[property]: 0});
var result = Object.prototype.propertyIsEnumerable.call(Object.create(proxy), property); var result = Object.prototype.propertyIsEnumerable.call(Object.create(proxy), property);
assert.sameValue(result, false); assert.sameValue(result, false);
assert.deepEqual(log, []); assert.compareArray(log, []);
} }

View File

@ -2,13 +2,14 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
/* Any copyright is dedicated to the Public Domain. /* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */ * http://creativecommons.org/publicdomain/zero/1.0/ */
@ -29,9 +30,8 @@ function logProxy(object = {}, handler = {}) {
var {proxy, log} = logProxy(); var {proxy, log} = logProxy();
Object.seal(proxy); Object.seal(proxy);
assert.deepEqual(log, ["preventExtensions", "ownKeys"]); assert.compareArray(log, ["preventExtensions", "ownKeys"]);
var {proxy, log} = logProxy(); var {proxy, log} = logProxy();
Object.seal(Object.seal(proxy)); Object.seal(Object.seal(proxy));
assert.deepEqual(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]); assert.compareArray(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]);

View File

@ -2,13 +2,14 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
includes: [deepEqual.js] includes: [compareArray.js]
flags: flags:
- noStrict - noStrict
description: | description: |
pending pending
esid: pending esid: pending
---*/ ---*/
// ES6 7.1.1 ToPrimitive(input [, PreferredType]) specifies a new extension // ES6 7.1.1 ToPrimitive(input [, PreferredType]) specifies a new extension
// point in the language. Objects can override the behavior of ToPrimitive // point in the language. Objects can override the behavior of ToPrimitive
// somewhat by supporting the method obj[@@toPrimitive](hint). // somewhat by supporting the method obj[@@toPrimitive](hint).
@ -107,5 +108,4 @@ var handler = new Proxy({}, {
}); });
proxy = new Proxy(Object.create(null), handler); proxy = new Proxy(Object.create(null), handler);
assert.throws(TypeError, () => proxy == 0); assert.throws(TypeError, () => proxy == 0);
assert.deepEqual(log, [Symbol.toPrimitive, "valueOf", "toString"]); assert.compareArray(log, [Symbol.toPrimitive, "valueOf", "toString"]);