Temporal: Test copying options object in since() and until()

In since() and until() methods, we copy the options object with
CopyDataProperties. Previously, its properties could be read in more than
one place (the method itself, and the calendar method), triggering user
code each time. Now, we pass around null-prototype objects with only data
properties.

See https://github.com/tc39/proposal-temporal/pull/2447
This commit is contained in:
Philip Chimento 2023-02-06 18:01:23 -08:00 committed by Philip Chimento
parent 1c47728a20
commit 8ad7d04afa
12 changed files with 140 additions and 138 deletions

View File

@ -11,16 +11,23 @@ features: [Temporal]
const expected = [
"get other.toString",
"call other.toString",
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
];
@ -30,10 +37,11 @@ const instance = new Temporal.Instant(1_000_000_000_000_000_000n);
instance.since(
TemporalHelpers.toPrimitiveObserver(actual, "1970-01-01T00:00Z", "other"),
TemporalHelpers.propertyBagObserver(actual, {
largestUnit: "hours",
roundingIncrement: 1,
roundingMode: "halfExpand",
largestUnit: "hours",
smallestUnit: "minutes",
additional: true,
}, "options"),
);
assert.compareArray(actual, expected, "order of operations");

View File

@ -11,16 +11,23 @@ features: [Temporal]
const expected = [
"get other.toString",
"call other.toString",
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
];
@ -30,10 +37,11 @@ const instance = new Temporal.Instant(0n);
instance.until(
TemporalHelpers.toPrimitiveObserver(actual, "2001-09-09T01:46:40Z", "other"),
TemporalHelpers.propertyBagObserver(actual, {
largestUnit: "hours",
roundingIncrement: 1,
roundingMode: "halfExpand",
largestUnit: "hours",
smallestUnit: "minutes",
additional: true,
}, "options"),
);
assert.compareArray(actual, expected, "order of operations");

View File

@ -35,19 +35,6 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
"get options.largestUnit",
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
@ -60,6 +47,15 @@ const expected = [
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CalendarDateUntil
"get this.calendar.dateUntil",
"call this.calendar.dateUntil",

View File

@ -35,19 +35,6 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
"get options.largestUnit",
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
@ -60,6 +47,15 @@ const expected = [
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CalendarDateUntil
"get this.calendar.dateUntil",
"call this.calendar.dateUntil",

View File

@ -53,19 +53,6 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
"get options.largestUnit",
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
@ -78,6 +65,15 @@ const expected = [
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CalendarDateUntil
"get this.calendar.dateUntil",
"call this.calendar.dateUntil",

View File

@ -53,19 +53,6 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
"get options.largestUnit",
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
@ -78,6 +65,15 @@ const expected = [
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CalendarDateUntil
"get this.calendar.dateUntil",
"call this.calendar.dateUntil",

View File

@ -31,17 +31,25 @@ const expected = [
"get other.second",
"get other.second.valueOf",
"call other.second.valueOf",
// GetDifferenceSettings
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
];
@ -60,10 +68,11 @@ const other = TemporalHelpers.propertyBagObserver(actual, {
}, "other");
const options = TemporalHelpers.propertyBagObserver(actual, {
smallestUnit: "nanoseconds",
largestUnit: "hours",
roundingMode: "trunc",
roundingIncrement: 1,
roundingMode: "trunc",
largestUnit: "hours",
smallestUnit: "nanoseconds",
additional: true,
}, "options");
const result = instance.since(other, options);

View File

@ -31,17 +31,25 @@ const expected = [
"get other.second",
"get other.second.valueOf",
"call other.second.valueOf",
// GetDifferenceSettings
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
];
@ -60,10 +68,11 @@ const other = TemporalHelpers.propertyBagObserver(actual, {
}, "other");
const options = TemporalHelpers.propertyBagObserver(actual, {
smallestUnit: "nanoseconds",
largestUnit: "hours",
roundingMode: "trunc",
roundingIncrement: 1,
roundingMode: "trunc",
largestUnit: "hours",
smallestUnit: "nanoseconds",
additional: true,
}, "options");
const result = instance.until(other, options);

View File

@ -32,17 +32,25 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CalendarFields
@ -62,18 +70,6 @@ const expected = [
"call other.calendar.year",
"get this.calendar.dateFromFields",
"call this.calendar.dateFromFields",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// CalendarDateUntil
"get this.calendar.dateUntil",
"call this.calendar.dateUntil",

View File

@ -32,17 +32,25 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
// CalendarFields
@ -62,18 +70,6 @@ const expected = [
"call other.calendar.year",
"get this.calendar.dateFromFields",
"call this.calendar.dateFromFields",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// CalendarDateUntil
"get this.calendar.dateUntil",
"call this.calendar.dateUntil",

View File

@ -62,17 +62,25 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
];
@ -127,18 +135,6 @@ const expectedOpsForCalendarDifference = [
"get other.timeZone[Symbol.toPrimitive]",
"get other.timeZone.toString",
"call other.timeZone.toString",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// DifferenceZonedDateTime
"get this.timeZone.getOffsetNanosecondsFor",
"call this.timeZone.getOffsetNanosecondsFor",

View File

@ -62,17 +62,25 @@ const expected = [
"get other.calendar[Symbol.toPrimitive]",
"get other.calendar.toString",
"call other.calendar.toString",
// GetDifferenceSettings
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// GetDifferenceSettings
"get options.largestUnit.toString",
"call options.largestUnit.toString",
"get options.roundingIncrement",
"get options.roundingIncrement.valueOf",
"call options.roundingIncrement.valueOf",
"get options.roundingMode",
"get options.roundingMode.toString",
"call options.roundingMode.toString",
"get options.smallestUnit",
"get options.smallestUnit.toString",
"call options.smallestUnit.toString",
];
@ -127,18 +135,6 @@ const expectedOpsForCalendarDifference = [
"get other.timeZone[Symbol.toPrimitive]",
"get other.timeZone.toString",
"call other.timeZone.toString",
// CopyDataProperties
"ownKeys options",
"getOwnPropertyDescriptor options.roundingIncrement",
"get options.roundingIncrement",
"getOwnPropertyDescriptor options.roundingMode",
"get options.roundingMode",
"getOwnPropertyDescriptor options.largestUnit",
"get options.largestUnit",
"getOwnPropertyDescriptor options.smallestUnit",
"get options.smallestUnit",
"getOwnPropertyDescriptor options.additional",
"get options.additional",
// DifferenceZonedDateTime
"get this.timeZone.getOffsetNanosecondsFor",
"call this.timeZone.getOffsetNanosecondsFor",