99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
|
// Copyright 2022 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
function testAssertNotEquals(a, b) {
|
||
|
let impl = (a, b) => {
|
||
|
assertNotEquals(a, b);
|
||
|
try {
|
||
|
assertEquals(a, b);
|
||
|
} catch (e) {
|
||
|
return;
|
||
|
}
|
||
|
throw new Error('assertEquals did not throw');
|
||
|
};
|
||
|
// Test in both directions.
|
||
|
impl(a, b);
|
||
|
impl(b, a);
|
||
|
}
|
||
|
|
||
|
function testAssertEquals(a, b) {
|
||
|
let impl = (a, b) => {
|
||
|
assertEquals(a, b);
|
||
|
try {
|
||
|
assertNotEquals(a, b);
|
||
|
} catch (e) {
|
||
|
return;
|
||
|
}
|
||
|
throw new Error('assertNotEquals did not throw');
|
||
|
};
|
||
|
// Test in both directions.
|
||
|
impl(a, b);
|
||
|
impl(b, a);
|
||
|
}
|
||
|
|
||
|
(function TestAssertEqualsNonEnumerableProperty() {
|
||
|
let a = {};
|
||
|
assertTrue(Reflect.defineProperty(a, 'prop', {value: 1}));
|
||
|
testAssertNotEquals({}, a);
|
||
|
// Both objects are treated as equal if they have the same properties
|
||
|
// with the same values independent of the property's enumerability.
|
||
|
testAssertEquals({prop: 1}, a);
|
||
|
testAssertNotEquals({prop: 2}, a);
|
||
|
})();
|
||
|
|
||
|
(function TestAssertEqualsPropertyOrder() {
|
||
|
// Test that property order does not matter.
|
||
|
let a = {};
|
||
|
a.x = 1;
|
||
|
a.y = 2;
|
||
|
let b = {};
|
||
|
b.y = 2;
|
||
|
b.x = 1;
|
||
|
testAssertEquals(a, b);
|
||
|
})();
|
||
|
|
||
|
(function TestAssertEqualsPropertyDifferentName() {
|
||
|
testAssertNotEquals({a: 1, b: 2}, {a: 1, c: 2});
|
||
|
testAssertNotEquals({a: 1, b: undefined}, {a: 1, c: undefined});
|
||
|
})();
|
||
|
|
||
|
(function TestAssertEqualsArrays() {
|
||
|
let arr = new Array();
|
||
|
arr.push(...[1, 2, 3]);
|
||
|
assertNotSame([1, 2, 3], arr);
|
||
|
testAssertEquals([1, 2, 3], arr);
|
||
|
testAssertNotEquals([1, 2, 3, 4], arr);
|
||
|
testAssertNotEquals([1, 2, -3], arr);
|
||
|
testAssertNotEquals([1, 3, 2], arr);
|
||
|
// Array length matters, even with empty elements
|
||
|
testAssertEquals(new Array(1), new Array(1));
|
||
|
testAssertNotEquals(new Array(1), new Array(2));
|
||
|
testAssertEquals([,,], new Array(2));
|
||
|
})();
|
||
|
|
||
|
(function TestAssertEqualsArraysNested() {
|
||
|
let arr = new Array();
|
||
|
arr.push(...[1, 2, new Array(3, 4, 5)]);
|
||
|
assertNotSame([1, 2, [3, 4, 5]], arr);
|
||
|
testAssertEquals([1, 2, [3, 4, 5]], arr);
|
||
|
})();
|
||
|
|
||
|
(function TestAssertEqualsArrayProperties() {
|
||
|
// Difference between empty and undefined is ignored by the assert
|
||
|
// implementation as well as additional properties.
|
||
|
testAssertEquals([undefined], new Array(1));
|
||
|
let arrWithProp = new Array();
|
||
|
arrWithProp.myProperty = 'Additional property';
|
||
|
testAssertEquals([], arrWithProp);
|
||
|
})();
|
||
|
|
||
|
(function TestAssertEqualsArrayObject() {
|
||
|
// An array isn't treated as equal to an equivalent object.
|
||
|
let obj = {0: 1, 1: 2};
|
||
|
Object.defineProperty(obj, 'length', {value: 2});
|
||
|
Object.setPrototypeOf(obj, Array.prototype);
|
||
|
testAssertNotEquals(obj , [1, 2]);
|
||
|
testAssertNotEquals([1, 2], obj);
|
||
|
})();
|