Skip to content

Commit

Permalink
Temporal: Fix mergeFields test for non-string keys
Browse files Browse the repository at this point in the history
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
tc39#3476, add a custom assert function
in the test.)
  • Loading branch information
ptomato authored and Ms2ger committed Oct 20, 2022
1 parent d59d28d commit 0534b9f
Showing 1 changed file with 27 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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"
);

0 comments on commit 0534b9f

Please sign in to comment.