From 44c64db92ccdd22766e7660dc4a2f379e0f7bff1 Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Fri, 27 Jan 2023 16:14:31 -0800 Subject: [PATCH] Validate required methods of Temporal TimeZone protocol Checking whether an object implements the TimeZone protocol is now done by means of HasProperty operations for each of the required methods unless the object already has the TimeZone brand. Discussion: https://github.com/tc39/proposal-temporal/issues/2104#issuecomment-1409549753 Corresponding normative PR: https://github.com/tc39/proposal-temporal/pull/2485 --- .../Temporal/Duration/compare/order-of-operations.js | 3 +++ .../compare/relativeto-propertybag-timezone-wrong-type.js | 3 ++- .../Temporal/Duration/prototype/add/order-of-operations.js | 4 ++++ .../add/relativeto-propertybag-timezone-wrong-type.js | 3 ++- .../Duration/prototype/round/order-of-operations.js | 3 +++ .../round/relativeto-propertybag-timezone-wrong-type.js | 3 ++- .../Duration/prototype/subtract/order-of-operations.js | 4 ++++ .../subtract/relativeto-propertybag-timezone-wrong-type.js | 3 ++- .../Duration/prototype/total/order-of-operations.js | 3 +++ .../total/relativeto-propertybag-timezone-wrong-type.js | 3 ++- .../Instant/prototype/toString/order-of-operations.js | 3 +++ .../Instant/prototype/toString/timezone-wrong-type.js | 3 ++- .../Temporal/Instant/prototype/toString/timezone.js | 3 +++ .../prototype/toZonedDateTime/plain-custom-timezone.js | 7 ++++++- .../prototype/toZonedDateTime/timezone-wrong-type.js | 3 ++- .../prototype/toZonedDateTimeISO/timezone-wrong-type.js | 3 ++- .../Temporal/Now/plainDate/timezone-wrong-type.js | 3 ++- .../Temporal/Now/plainDate/toPlainDate-override.js | 3 +++ .../Temporal/Now/plainDateISO/timezone-wrong-type.js | 3 ++- .../Temporal/Now/plainDateTime/calendar-function.js | 3 +++ test/built-ins/Temporal/Now/plainDateTime/return-value.js | 2 ++ .../timezone-getoffsetnanosecondsfor-invocation.js | 2 ++ .../timezone-getoffsetnanosecondsfor-not-a-number.js | 4 +++- .../timezone-getoffsetnanosecondsfor-poisoned.js | 2 ++ .../timezone-getoffsetnanosecondsfor-throws.js | 2 ++ .../Temporal/Now/plainDateTime/timezone-object.js | 3 +++ .../Temporal/Now/plainDateTime/timezone-wrong-type.js | 3 ++- test/built-ins/Temporal/Now/plainDateTime/timezone.js | 3 +++ .../Temporal/Now/plainDateTimeISO/return-value.js | 2 ++ .../timezone-getoffsetnanosecondsfor-invocation.js | 2 ++ .../timezone-getoffsetnanosecondsfor-not-a-number.js | 2 ++ .../timezone-getoffsetnanosecondsfor-poisoned.js | 2 ++ .../timezone-getoffsetnanosecondsfor-throws.js | 2 ++ .../Temporal/Now/plainDateTimeISO/timezone-object.js | 3 +++ .../Temporal/Now/plainDateTimeISO/timezone-wrong-type.js | 3 ++- .../Temporal/Now/plainTimeISO/timezone-wrong-type.js | 3 ++- test/built-ins/Temporal/Now/plainTimeISO/timezone.js | 3 +++ .../Temporal/Now/plainTimeISO/toPlainTime-override.js | 3 +++ .../Temporal/Now/zonedDateTime/calendar-function.js | 7 ++++++- .../Temporal/Now/zonedDateTime/timezone-object.js | 7 ++++++- .../Temporal/Now/zonedDateTime/timezone-wrong-type.js | 3 ++- .../Temporal/Now/zonedDateTimeISO/timezone-object.js | 7 ++++++- .../Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js | 3 ++- .../prototype/toZonedDateTime/timezone-wrong-type.js | 3 ++- .../prototype/toZonedDateTime/order-of-operations.js | 4 ++++ .../prototype/toZonedDateTime/plain-custom-timezone.js | 3 +++ .../prototype/toZonedDateTime/timezone-wrong-type.js | 3 ++- .../prototype/toZonedDateTime/timezone-wrong-type.js | 3 ++- test/built-ins/Temporal/TimeZone/from/argument-object.js | 4 +--- .../Temporal/TimeZone/from/timezone-wrong-type.js | 3 ++- .../compare/argument-propertybag-timezone-wrong-type.js | 3 ++- .../Temporal/ZonedDateTime/compare/order-of-operations.js | 6 ++++++ .../from/argument-propertybag-timezone-wrong-type.js | 3 ++- .../Temporal/ZonedDateTime/from/order-of-operations.js | 3 +++ .../equals/argument-propertybag-timezone-wrong-type.js | 3 ++- .../ZonedDateTime/prototype/equals/order-of-operations.js | 3 +++ .../since/argument-propertybag-timezone-wrong-type.js | 3 ++- .../ZonedDateTime/prototype/since/order-of-operations.js | 3 +++ .../prototype/toPlainDateTime/plain-custom-timezone.js | 3 +++ .../ZonedDateTime/prototype/toString/timezonename-auto.js | 1 + .../prototype/toString/timezonename-critical.js | 1 + .../ZonedDateTime/prototype/toString/timezonename-never.js | 3 ++- .../until/argument-propertybag-timezone-wrong-type.js | 3 ++- .../ZonedDateTime/prototype/until/order-of-operations.js | 3 +++ .../with/timezone-getoffsetnanosecondsfor-not-callable.js | 1 + .../prototype/withTimeZone/timezone-wrong-type.js | 3 ++- .../ZonedDateTime/old/construction-and-properties.js | 1 + test/staging/Temporal/ZonedDateTime/old/equals.js | 1 + 68 files changed, 175 insertions(+), 34 deletions(-) diff --git a/test/built-ins/Temporal/Duration/compare/order-of-operations.js b/test/built-ins/Temporal/Duration/compare/order-of-operations.js index 4af2518bbda..b760ae7f11c 100644 --- a/test/built-ins/Temporal/Duration/compare/order-of-operations.js +++ b/test/built-ins/Temporal/Duration/compare/order-of-operations.js @@ -191,6 +191,9 @@ const expectedOpsForZonedRelativeTo = expected.concat([ "call options.relativeTo.year.valueOf", "get options.relativeTo.calendar.dateFromFields", "call options.relativeTo.calendar.dateFromFields", + "has options.relativeTo.timeZone.getOffsetNanosecondsFor", + "has options.relativeTo.timeZone.getPossibleInstantsFor", + "has options.relativeTo.timeZone.id", "get options.relativeTo.timeZone.getPossibleInstantsFor", "call options.relativeTo.timeZone.getPossibleInstantsFor", "get options.relativeTo.timeZone.getOffsetNanosecondsFor", diff --git a/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-timezone-wrong-type.js index ccb8c1847e2..b37aa4e60a6 100644 --- a/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/Duration/compare/relativeto-propertybag-timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Duration/prototype/add/order-of-operations.js b/test/built-ins/Temporal/Duration/prototype/add/order-of-operations.js index a872a36cac9..e07bc7347e6 100644 --- a/test/built-ins/Temporal/Duration/prototype/add/order-of-operations.js +++ b/test/built-ins/Temporal/Duration/prototype/add/order-of-operations.js @@ -175,6 +175,10 @@ const expectedOpsForZonedRelativeTo = expected.concat([ // InterpretTemporalDateTimeFields "get options.relativeTo.calendar.dateFromFields", "call options.relativeTo.calendar.dateFromFields", + // ToRelativeTemporalObject again + "has options.relativeTo.timeZone.getOffsetNanosecondsFor", + "has options.relativeTo.timeZone.getPossibleInstantsFor", + "has options.relativeTo.timeZone.id", // InterpretISODateTimeOffset "get options.relativeTo.timeZone.getPossibleInstantsFor", "call options.relativeTo.timeZone.getPossibleInstantsFor", diff --git a/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-timezone-wrong-type.js index f77a416dc2e..3b33c578509 100644 --- a/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/Duration/prototype/add/relativeto-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js b/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js index 7f427c372a9..02055c08706 100644 --- a/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js +++ b/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js @@ -268,6 +268,9 @@ const expectedOpsForZonedRelativeTo = [ "call options.relativeTo.year.valueOf", "get options.relativeTo.calendar.dateFromFields", "call options.relativeTo.calendar.dateFromFields", + "has options.relativeTo.timeZone.getOffsetNanosecondsFor", + "has options.relativeTo.timeZone.getPossibleInstantsFor", + "has options.relativeTo.timeZone.id", // InterpretISODateTimeOffset "get options.relativeTo.timeZone.getPossibleInstantsFor", "call options.relativeTo.timeZone.getPossibleInstantsFor", diff --git a/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-timezone-wrong-type.js index 5618349ad6e..8c055719610 100644 --- a/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/Duration/prototype/round/relativeto-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/order-of-operations.js b/test/built-ins/Temporal/Duration/prototype/subtract/order-of-operations.js index 42ec0727121..8d96ee6a206 100644 --- a/test/built-ins/Temporal/Duration/prototype/subtract/order-of-operations.js +++ b/test/built-ins/Temporal/Duration/prototype/subtract/order-of-operations.js @@ -175,6 +175,10 @@ const expectedOpsForZonedRelativeTo = expected.concat([ // InterpretTemporalDateTimeFields "get options.relativeTo.calendar.dateFromFields", "call options.relativeTo.calendar.dateFromFields", + // ToRelativeTemporalObject again + "has options.relativeTo.timeZone.getOffsetNanosecondsFor", + "has options.relativeTo.timeZone.getPossibleInstantsFor", + "has options.relativeTo.timeZone.id", // InterpretISODateTimeOffset "get options.relativeTo.timeZone.getPossibleInstantsFor", "call options.relativeTo.timeZone.getPossibleInstantsFor", diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-timezone-wrong-type.js index 0d92e890351..61ad351a607 100644 --- a/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Duration/prototype/total/order-of-operations.js b/test/built-ins/Temporal/Duration/prototype/total/order-of-operations.js index f6420b37d00..57196df4fc1 100644 --- a/test/built-ins/Temporal/Duration/prototype/total/order-of-operations.js +++ b/test/built-ins/Temporal/Duration/prototype/total/order-of-operations.js @@ -181,6 +181,9 @@ const expectedOpsForZonedRelativeTo = [ "call options.relativeTo.year.valueOf", "get options.relativeTo.calendar.dateFromFields", "call options.relativeTo.calendar.dateFromFields", + "has options.relativeTo.timeZone.getOffsetNanosecondsFor", + "has options.relativeTo.timeZone.getPossibleInstantsFor", + "has options.relativeTo.timeZone.id", // InterpretISODateTimeOffset "get options.relativeTo.timeZone.getPossibleInstantsFor", "call options.relativeTo.timeZone.getPossibleInstantsFor", diff --git a/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-timezone-wrong-type.js index e75f3141adc..b19bec2af7a 100644 --- a/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/Duration/prototype/total/relativeto-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Instant/prototype/toString/order-of-operations.js b/test/built-ins/Temporal/Instant/prototype/toString/order-of-operations.js index 4f551407086..0c4e27bc033 100644 --- a/test/built-ins/Temporal/Instant/prototype/toString/order-of-operations.js +++ b/test/built-ins/Temporal/Instant/prototype/toString/order-of-operations.js @@ -19,6 +19,9 @@ const expected = [ "get options.smallestUnit.toString", "call options.smallestUnit.toString", "get options.timeZone", + "has options.timeZone.getOffsetNanosecondsFor", + "has options.timeZone.getPossibleInstantsFor", + "has options.timeZone.id", "get options.timeZone.getOffsetNanosecondsFor", "call options.timeZone.getOffsetNanosecondsFor", "get options.timeZone.getOffsetNanosecondsFor", diff --git a/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js b/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js index 7904ef0a19c..7ca0cc0a2d6 100644 --- a/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Instant/prototype/toString/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Instant/prototype/toString/timezone.js b/test/built-ins/Temporal/Instant/prototype/toString/timezone.js index 19eac92a8f7..3a573541656 100644 --- a/test/built-ins/Temporal/Instant/prototype/toString/timezone.js +++ b/test/built-ins/Temporal/Instant/prototype/toString/timezone.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get timeZone.getOffsetNanosecondsFor", "call timeZone.getOffsetNanosecondsFor", "get timeZone.getOffsetNanosecondsFor", diff --git a/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/plain-custom-timezone.js b/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/plain-custom-timezone.js index 86901d33245..6e5b7889228 100644 --- a/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/plain-custom-timezone.js +++ b/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/plain-custom-timezone.js @@ -9,6 +9,11 @@ features: [Temporal] ---*/ const actual = []; +const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", +]; const instant = Temporal.Instant.from("1975-02-02T14:25:36.123456789Z"); const calendar = Temporal.Calendar.from("iso8601"); @@ -19,4 +24,4 @@ const timeZone = TemporalHelpers.timeZoneObserver(actual, "timeZone", { const result = instant.toZonedDateTime({ timeZone, calendar }); assert.sameValue(result.epochNanoseconds, instant.epochNanoseconds); -assert.compareArray(actual, []); +assert.compareArray(actual, expected); diff --git a/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js b/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js index 2fe28779307..0b3dd555e86 100644 --- a/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js b/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js index 15c4814d870..7f09d939a8e 100644 --- a/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js b/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js index 8bf7bd9ee85..18ec9b628e3 100644 --- a/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/plainDate/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/plainDate/toPlainDate-override.js b/test/built-ins/Temporal/Now/plainDate/toPlainDate-override.js index 552cf1d21cd..aa9a3ae32a9 100644 --- a/test/built-ins/Temporal/Now/plainDate/toPlainDate-override.js +++ b/test/built-ins/Temporal/Now/plainDate/toPlainDate-override.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get timeZone.getOffsetNanosecondsFor", "call timeZone.getOffsetNanosecondsFor", ]; diff --git a/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js b/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js index 89c7a3ab5b7..1478b5303ab 100644 --- a/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/plainDateISO/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/plainDateTime/calendar-function.js b/test/built-ins/Temporal/Now/plainDateTime/calendar-function.js index 8596750bcd6..1b668fc5354 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/calendar-function.js +++ b/test/built-ins/Temporal/Now/plainDateTime/calendar-function.js @@ -9,6 +9,9 @@ features: [BigInt, Proxy, Temporal] const actual = []; const expected = [ + 'has timeZone.getOffsetNanosecondsFor', + 'has timeZone.getPossibleInstantsFor', + 'has timeZone.id', 'get timeZone.getOffsetNanosecondsFor', 'call timeZone.getOffsetNanosecondsFor' ]; diff --git a/test/built-ins/Temporal/Now/plainDateTime/return-value.js b/test/built-ins/Temporal/Now/plainDateTime/return-value.js index 8ae9424be19..3ec75b7f237 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/return-value.js +++ b/test/built-ins/Temporal/Now/plainDateTime/return-value.js @@ -8,6 +8,8 @@ features: [BigInt, Temporal] const calendar = Temporal.Calendar.from('iso8601'); const timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor(instant) { return -Number(instant.epochNanoseconds % 86400000000000n); } diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-invocation.js b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-invocation.js index 5a24b0271d9..8e0266a54ae 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-invocation.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-invocation.js @@ -8,6 +8,8 @@ features: [Temporal] var calls = []; var timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor: function() { calls.push({ args: arguments, diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-not-a-number.js b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-not-a-number.js index 628bdea9330..e8755f386f5 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-not-a-number.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-not-a-number.js @@ -21,7 +21,9 @@ for (const dateTime of invalidValues) { let callCount = 0; const timeZone = { - getOffsetNanosecondsFor(instant, calendar) { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, + getOffsetNanosecondsFor() { callCount += 1; return dateTime; } diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-poisoned.js b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-poisoned.js index e46cecbf144..a8649a046a6 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-poisoned.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-poisoned.js @@ -7,6 +7,8 @@ features: [Temporal] ---*/ var timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, get getOffsetNanosecondsFor() { throw new Test262Error(); } diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-throws.js b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-throws.js index 3af6f00c4ab..12ed043c9cf 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-throws.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone-getoffsetnanosecondsfor-throws.js @@ -7,6 +7,8 @@ features: [Temporal] ---*/ var timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor() { throw new Test262Error(); } diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone-object.js b/test/built-ins/Temporal/Now/plainDateTime/timezone-object.js index f5d33421d1b..ea8a25e32b8 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone-object.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone-object.js @@ -9,6 +9,9 @@ features: [BigInt, Proxy, Temporal] const actual = []; const expected = [ + 'has timeZone.getOffsetNanosecondsFor', + 'has timeZone.getPossibleInstantsFor', + 'has timeZone.id', 'get timeZone.getOffsetNanosecondsFor', 'call timeZone.getOffsetNanosecondsFor' ]; diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js b/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js index 76bbc2a0e2a..d68dc04aa01 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/plainDateTime/timezone.js b/test/built-ins/Temporal/Now/plainDateTime/timezone.js index 1d1d8c9558f..bb176e6892a 100644 --- a/test/built-ins/Temporal/Now/plainDateTime/timezone.js +++ b/test/built-ins/Temporal/Now/plainDateTime/timezone.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get timeZone.getOffsetNanosecondsFor", "call timeZone.getOffsetNanosecondsFor", ]; diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/return-value.js b/test/built-ins/Temporal/Now/plainDateTimeISO/return-value.js index c0de72cb6d5..f1f31f2bb93 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/return-value.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/return-value.js @@ -6,6 +6,8 @@ description: Return value describes the start of a day features: [BigInt, Temporal] ---*/ const timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor(instant) { return -Number(instant.epochNanoseconds % 86400000000000n); } diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-invocation.js b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-invocation.js index 4cf8cd20110..03f3bd666e1 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-invocation.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-invocation.js @@ -8,6 +8,8 @@ features: [Temporal] var calls = []; var timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor: function() { calls.push({ args: arguments, diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-not-a-number.js b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-not-a-number.js index 57f53048120..4fd510ca606 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-not-a-number.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-not-a-number.js @@ -21,6 +21,8 @@ for (const dateTime of invalidValues) { let callCount = 0; const timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor(instant, calendar) { callCount += 1; return dateTime; diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-poisoned.js b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-poisoned.js index 822e6a6b6dc..e1d4a73506c 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-poisoned.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-poisoned.js @@ -7,6 +7,8 @@ features: [Temporal] ---*/ var timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, get getOffsetNanosecondsFor() { throw new Test262Error(); } diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-throws.js b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-throws.js index 2c87fdf471e..21b92652a65 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-throws.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-getoffsetnanosecondsfor-throws.js @@ -7,6 +7,8 @@ features: [Temporal] ---*/ var timeZone = { + id: 'Etc/Test', + getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor() { throw new Test262Error(); } diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-object.js b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-object.js index 54cb16c241b..329207447e5 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-object.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-object.js @@ -9,6 +9,9 @@ features: [BigInt, Proxy, Temporal] const actual = []; const expected = [ + 'has timeZone.getOffsetNanosecondsFor', + 'has timeZone.getPossibleInstantsFor', + 'has timeZone.id', 'get timeZone.getOffsetNanosecondsFor', 'call timeZone.getOffsetNanosecondsFor' ]; diff --git a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js index e44908ec8d1..5fde195e2a0 100644 --- a/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/plainDateTimeISO/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js b/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js index ef1b7149e05..09be7bb6964 100644 --- a/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/plainTimeISO/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/plainTimeISO/timezone.js b/test/built-ins/Temporal/Now/plainTimeISO/timezone.js index 75cf03f9b11..afdbe41bd82 100644 --- a/test/built-ins/Temporal/Now/plainTimeISO/timezone.js +++ b/test/built-ins/Temporal/Now/plainTimeISO/timezone.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get timeZone.getOffsetNanosecondsFor", "call timeZone.getOffsetNanosecondsFor", ]; diff --git a/test/built-ins/Temporal/Now/plainTimeISO/toPlainTime-override.js b/test/built-ins/Temporal/Now/plainTimeISO/toPlainTime-override.js index c93449e765b..7411562060f 100644 --- a/test/built-ins/Temporal/Now/plainTimeISO/toPlainTime-override.js +++ b/test/built-ins/Temporal/Now/plainTimeISO/toPlainTime-override.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get timeZone.getOffsetNanosecondsFor", "call timeZone.getOffsetNanosecondsFor", ]; diff --git a/test/built-ins/Temporal/Now/zonedDateTime/calendar-function.js b/test/built-ins/Temporal/Now/zonedDateTime/calendar-function.js index 10632cd37e7..ce0ce37aee8 100644 --- a/test/built-ins/Temporal/Now/zonedDateTime/calendar-function.js +++ b/test/built-ins/Temporal/Now/zonedDateTime/calendar-function.js @@ -7,6 +7,11 @@ includes: [compareArray.js, temporalHelpers.js] features: [BigInt, Proxy, Temporal] ---*/ const actual = []; +const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", +]; const calendar = function() {}; @@ -25,7 +30,7 @@ Object.defineProperty(Temporal.Calendar, 'from', { const result = Temporal.Now.zonedDateTime(calendar, timeZone); -assert.compareArray(actual, [], 'no observable operations should be invoked'); +assert.compareArray(actual, expected, 'order of observable operations'); for (const property of ['hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond']) { assert.sameValue(result[property], 0, 'The value of result[property] is expected to be 0'); diff --git a/test/built-ins/Temporal/Now/zonedDateTime/timezone-object.js b/test/built-ins/Temporal/Now/zonedDateTime/timezone-object.js index 3bbb2d30e8c..f6f9631b552 100644 --- a/test/built-ins/Temporal/Now/zonedDateTime/timezone-object.js +++ b/test/built-ins/Temporal/Now/zonedDateTime/timezone-object.js @@ -7,6 +7,11 @@ includes: [compareArray.js, temporalHelpers.js] features: [BigInt, Proxy, Temporal] ---*/ const actual = []; +const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", +]; const timeZone = TemporalHelpers.timeZoneObserver(actual, "timeZone", { getOffsetNanosecondsFor(instant) { @@ -28,4 +33,4 @@ Object.defineProperty(Temporal.TimeZone, 'from', { }); Temporal.Now.zonedDateTime('iso8601', timeZone); -assert.compareArray(actual, [], 'no observable operations should be invoked'); +assert.compareArray(actual, expected, 'order of observable operations'); diff --git a/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js b/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js index 976ba27c80c..12fd8c4204c 100644 --- a/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/zonedDateTime/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-object.js b/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-object.js index bcb8472dc27..36be882fbf6 100644 --- a/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-object.js +++ b/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-object.js @@ -7,6 +7,11 @@ includes: [compareArray.js, temporalHelpers.js] features: [BigInt, Proxy, Temporal] ---*/ const actual = []; +const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", +]; const timeZone = TemporalHelpers.timeZoneObserver(actual, "timeZone", { getOffsetNanosecondsFor(instant) { @@ -28,4 +33,4 @@ Object.defineProperty(Temporal.TimeZone, 'from', { }); Temporal.Now.zonedDateTimeISO(timeZone); -assert.compareArray(actual, [], 'no observable operations should be invoked'); +assert.compareArray(actual, expected, 'order of observable operations'); diff --git a/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js b/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js index 3c3b4023a0b..5b75622ed16 100644 --- a/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js +++ b/test/built-ins/Temporal/Now/zonedDateTimeISO/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js b/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js index 95d2789f50f..a54d302728b 100644 --- a/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js +++ b/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/order-of-operations.js b/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/order-of-operations.js index e47e3a7c985..813aaaac68d 100644 --- a/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/order-of-operations.js +++ b/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/order-of-operations.js @@ -9,6 +9,10 @@ features: [Temporal] ---*/ const expected = [ + // ToTemporalTimeZoneSlotValue + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", // ToTemporalDisambiguation "get options.disambiguation", "get options.disambiguation.toString", diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/plain-custom-timezone.js b/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/plain-custom-timezone.js index 4b3b66a03b1..77e507cbfd6 100644 --- a/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/plain-custom-timezone.js +++ b/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/plain-custom-timezone.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get options.disambiguation", "get options.disambiguation.toString", "call options.disambiguation.toString", diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js b/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js index 44cd2790702..4538ced085f 100644 --- a/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js +++ b/test/built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js b/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js index cbc3124db63..7aa204395e2 100644 --- a/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js +++ b/test/built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/TimeZone/from/argument-object.js b/test/built-ins/Temporal/TimeZone/from/argument-object.js index 48ff3d1a9e9..31d443ba3a9 100644 --- a/test/built-ins/Temporal/TimeZone/from/argument-object.js +++ b/test/built-ins/Temporal/TimeZone/from/argument-object.js @@ -12,9 +12,7 @@ class CustomTimeZone extends Temporal.TimeZone {} const objects = [ new Temporal.TimeZone("UTC"), new CustomTimeZone("UTC"), - {}, - { getPlainDateTimeFor: null }, - { id: "Etc/Custom" }, + { id: "Etc/Custom", getPossibleInstantsFor: null, getOffsetNanosecondsFor: null }, ]; const thisValues = [ diff --git a/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js b/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js index 172320b9bb6..ac74b54f7fd 100644 --- a/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js +++ b/test/built-ins/Temporal/TimeZone/from/timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-timezone-wrong-type.js index 2b354dcbd84..12ae11172c7 100644 --- a/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/ZonedDateTime/compare/argument-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -28,6 +27,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/ZonedDateTime/compare/order-of-operations.js b/test/built-ins/Temporal/ZonedDateTime/compare/order-of-operations.js index aa38edc7742..209b732b314 100644 --- a/test/built-ins/Temporal/ZonedDateTime/compare/order-of-operations.js +++ b/test/built-ins/Temporal/ZonedDateTime/compare/order-of-operations.js @@ -47,6 +47,9 @@ const expected = [ "get one.year", "get one.year.valueOf", "call one.year.valueOf", + "has one.timeZone.getOffsetNanosecondsFor", + "has one.timeZone.getPossibleInstantsFor", + "has one.timeZone.id", // InterpretTemporalDateTimeFields "get one.calendar.dateFromFields", "call one.calendar.dateFromFields", @@ -94,6 +97,9 @@ const expected = [ "get two.year", "get two.year.valueOf", "call two.year.valueOf", + "has two.timeZone.getOffsetNanosecondsFor", + "has two.timeZone.getPossibleInstantsFor", + "has two.timeZone.id", // InterpretTemporalDateTimeFields "get two.calendar.dateFromFields", "call two.calendar.dateFromFields", diff --git a/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-timezone-wrong-type.js index 81d4d21d7da..d4e814ebbe5 100644 --- a/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/ZonedDateTime/from/argument-propertybag-timezone-wrong-type.js @@ -16,7 +16,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -25,6 +24,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/ZonedDateTime/from/order-of-operations.js b/test/built-ins/Temporal/ZonedDateTime/from/order-of-operations.js index da43817c088..7881e8098fe 100644 --- a/test/built-ins/Temporal/ZonedDateTime/from/order-of-operations.js +++ b/test/built-ins/Temporal/ZonedDateTime/from/order-of-operations.js @@ -47,6 +47,9 @@ const expected = [ "get item.year", "get item.year.valueOf", "call item.year.valueOf", + "has item.timeZone.getOffsetNanosecondsFor", + "has item.timeZone.getPossibleInstantsFor", + "has item.timeZone.id", // InterpretTemporalDateTimeFields "get options.disambiguation", "get options.disambiguation.toString", diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-timezone-wrong-type.js index 284a2f3ac2b..2f5480eea3e 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/equals/order-of-operations.js b/test/built-ins/Temporal/ZonedDateTime/prototype/equals/order-of-operations.js index ff90d04f7a1..a39fa966372 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/equals/order-of-operations.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/equals/order-of-operations.js @@ -47,6 +47,9 @@ const expected = [ "get other.year", "get other.year.valueOf", "call other.year.valueOf", + "has other.timeZone.getOffsetNanosecondsFor", + "has other.timeZone.getPossibleInstantsFor", + "has other.timeZone.id", // InterpretTemporalDateTimeFields "get other.calendar.dateFromFields", "call other.calendar.dateFromFields", diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-timezone-wrong-type.js index 4024447a635..4535b54017e 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/since/order-of-operations.js b/test/built-ins/Temporal/ZonedDateTime/prototype/since/order-of-operations.js index 3221ea35472..4e21060db18 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/since/order-of-operations.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/since/order-of-operations.js @@ -47,6 +47,9 @@ const expected = [ "get other.year", "get other.year.valueOf", "call other.year.valueOf", + "has other.timeZone.getOffsetNanosecondsFor", + "has other.timeZone.getPossibleInstantsFor", + "has other.timeZone.id", "get other.calendar.dateFromFields", "call other.calendar.dateFromFields", "get other.timeZone.getPossibleInstantsFor", diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainDateTime/plain-custom-timezone.js b/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainDateTime/plain-custom-timezone.js index a20429d86cc..1ec1b9a7394 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainDateTime/plain-custom-timezone.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/toPlainDateTime/plain-custom-timezone.js @@ -10,6 +10,9 @@ features: [Temporal] const actual = []; const expected = [ + "has timeZone.getOffsetNanosecondsFor", + "has timeZone.getPossibleInstantsFor", + "has timeZone.id", "get timeZone.getOffsetNanosecondsFor", "call timeZone.getOffsetNanosecondsFor", ]; diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-auto.js b/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-auto.js index bdde75152f6..46f1b57c3bf 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-auto.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-auto.js @@ -12,6 +12,7 @@ const tests = [ ["+01:00", "1970-01-01T02:01:01.987654321+01:00[+01:00]", "built-in offset"], [{ getOffsetNanosecondsFor() { return 0; }, + getPossibleInstantsFor() { return []; }, id: "Etc/Custom", }, "1970-01-01T01:01:01.987654321+00:00[Etc/Custom]", "custom"], ]; diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-critical.js b/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-critical.js index e7b79c94ffe..b20ebe5d7a7 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-critical.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-critical.js @@ -14,6 +14,7 @@ const tests = [ ["+01:00", "1970-01-01T02:01:01.987654321+01:00[!+01:00]", "built-in offset"], [{ getOffsetNanosecondsFor() { return 0; }, + getPossibleInstantsFor() { return []; }, id: "Etc/Custom", }, "1970-01-01T01:01:01.987654321+00:00[!Etc/Custom]", "custom"], ]; diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-never.js b/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-never.js index 632dff2ccb2..5f87ca06bb8 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-never.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/toString/timezonename-never.js @@ -12,7 +12,8 @@ const tests = [ ["+01:00", "1970-01-01T02:01:01.987654321+01:00", "built-in offset"], [{ getOffsetNanosecondsFor() { return 0; }, - toString() { return "Etc/Custom"; }, + getPossibleInstantsFor() { return []; }, + id: "Etc/Custom", }, "1970-01-01T01:01:01.987654321+00:00", "custom"], ]; diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-timezone-wrong-type.js b/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-timezone-wrong-type.js index 073c937a850..9f3dcd50419 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-timezone-wrong-type.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-propertybag-timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/until/order-of-operations.js b/test/built-ins/Temporal/ZonedDateTime/prototype/until/order-of-operations.js index 10a4038f3bf..a64ddd12ebe 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/until/order-of-operations.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/until/order-of-operations.js @@ -47,6 +47,9 @@ const expected = [ "get other.year", "get other.year.valueOf", "call other.year.valueOf", + "has other.timeZone.getOffsetNanosecondsFor", + "has other.timeZone.getPossibleInstantsFor", + "has other.timeZone.id", "get other.calendar.dateFromFields", "call other.calendar.dateFromFields", "get other.timeZone.getPossibleInstantsFor", diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/with/timezone-getoffsetnanosecondsfor-not-callable.js b/test/built-ins/Temporal/ZonedDateTime/prototype/with/timezone-getoffsetnanosecondsfor-not-callable.js index 18412e810e9..bd2f5c3799e 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/with/timezone-getoffsetnanosecondsfor-not-callable.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/with/timezone-getoffsetnanosecondsfor-not-callable.js @@ -18,6 +18,7 @@ features: [BigInt, Symbol, Temporal, arrow-function] ); const badTimeZone = { + id: "Etc/Bad", getPossibleInstantsFor() { return []; }, getOffsetNanosecondsFor: notCallable, }; diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js b/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js index 4615fba3ef4..96fee6b2cfe 100644 --- a/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/withTimeZone/timezone-wrong-type.js @@ -18,7 +18,6 @@ const rangeErrorTests = [ [1, "number that doesn't convert to a valid ISO string"], [19761118, "number that would convert to a valid ISO string in other contexts"], [1n, "bigint"], - [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of rangeErrorTests) { @@ -27,6 +26,8 @@ for (const [timeZone, description] of rangeErrorTests) { const typeErrorTests = [ [Symbol(), "symbol"], + [{}, "object not implementing time zone protocol"], + [new Temporal.Calendar("iso8601"), "calendar instance"], ]; for (const [timeZone, description] of typeErrorTests) { diff --git a/test/staging/Temporal/ZonedDateTime/old/construction-and-properties.js b/test/staging/Temporal/ZonedDateTime/old/construction-and-properties.js index 5a78498594a..63e5216902d 100644 --- a/test/staging/Temporal/ZonedDateTime/old/construction-and-properties.js +++ b/test/staging/Temporal/ZonedDateTime/old/construction-and-properties.js @@ -70,6 +70,7 @@ var fakeGregorian = { }; var fakeVienna = { getOffsetNanosecondsFor() { return 3600_000_000_000; }, + getPossibleInstantsFor(datetime) { return [datetime.toZonedDateTime("+01:00").toInstant()]; }, id: "Europe/Vienna", } var zdt = new Temporal.ZonedDateTime(epochNanos, fakeVienna, fakeGregorian); diff --git a/test/staging/Temporal/ZonedDateTime/old/equals.js b/test/staging/Temporal/ZonedDateTime/old/equals.js index 8715af737c5..46c85290d19 100644 --- a/test/staging/Temporal/ZonedDateTime/old/equals.js +++ b/test/staging/Temporal/ZonedDateTime/old/equals.js @@ -8,6 +8,7 @@ features: [Temporal] ---*/ var tz = { + getOffsetNanosecondsFor() { return -5 * 3600_000_000_000; }, getPossibleInstantsFor(pdt) { return Temporal.TimeZone.from("-05:00").getPossibleInstantsFor(pdt); }, id: "America/New_York", };