Temporal: Fix mergeFields test for non-string keys

Using assert.deepEqual was faulty here, since deepEqual doesn't take
symbol keys into account. This test wasn't actually testing that the
symbol keys were absent, and in fact passes if they are present.

(Rather than fixing deepEqual, since we hope to deprecate it as per
https://github.com/tc39/test262/issues/3476, add a custom assert function
in the test.)
This commit is contained in:
Philip Chimento 2022-10-17 15:49:34 -07:00 committed by Ms2ger
parent d59d28defa
commit dfbeca3c79
1 changed files with 27 additions and 6 deletions

View File

@ -13,22 +13,43 @@ info: |
5. Set additionalFields to ? ToObject(additionalFields).
6. Return ? DefaultMergeFields(fields, additionalFields).
features: [Temporal]
includes: [deepEqual.js]
---*/
function assertEntriesEqual(actual, expectedEntries, message) {
const names = Object.getOwnPropertyNames(actual);
const symbols = Object.getOwnPropertySymbols(actual);
const actualKeys = names.concat(symbols);
assert.sameValue(
actualKeys.length,
expectedEntries.length,
`${message}: expected object to have ${expectedEntries.length} properties, not ${actualKeys.length}:`
);
for (var index = 0; index < actualKeys.length; index++) {
const actualKey = actualKeys[index];
const expectedKey = expectedEntries[index][0];
const expectedValue = expectedEntries[index][1];
assert.sameValue(actualKey, expectedKey, `${message}: key ${index}:`);
assert.sameValue(actual[actualKey], expectedValue, `${message}: value ${index}:`);
}
}
const cal = new Temporal.Calendar("iso8601");
assert.deepEqual(
assertEntriesEqual(
cal.mergeFields({ 1: 2 }, { 3: 4 }),
{ "1": 2, "3": 4 },
[["1", 2], ["3", 4]],
"number keys are actually string keys and are merged as such"
);
assert.deepEqual(
assertEntriesEqual(
cal.mergeFields({ 1n: 2 }, { 2n: 4 }),
{ "1": 2, "2": 4 },
[["1", 2], ["2", 4]],
"bigint keys are actually string keys and are merged as such"
);
const foo = Symbol("foo");
const bar = Symbol("bar");
assert.deepEqual(cal.mergeFields({ [foo]: 1 }, { [bar]: 2 }), {}, "symbol keys are not merged");
assertEntriesEqual(
cal.mergeFields({ [foo]: 1 }, { [bar]: 2 }),
[],
"symbol keys are not merged"
);