From d6a24fe9060a3f73ba9c8a03cd3d89c16468cd11 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 4af2518bbd..b760ae7f11 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 ccb8c1847e..b37aa4e60a 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 a872a36cac..e07bc7347e 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 f77a416dc2..3b33c57850 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 7f427c372a..02055c0870 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 5618349ad6..8c05571961 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 42ec072712..8d96ee6a20 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 0d92e89035..61ad351a60 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 f6420b37d0..57196df4fc 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 e75f3141ad..b19bec2af7 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 4f55140708..0c4e27bc03 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 7904ef0a19..7ca0cc0a2d 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 19eac92a8f..3a57354165 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 86901d3324..6e5b788922 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 2fe2877930..0b3dd555e8 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 15c4814d87..7f09d939a8 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 8bf7bd9ee8..18ec9b628e 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 552cf1d21c..aa9a3ae32a 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 89c7a3ab5b..1478b5303a 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 8596750bcd..1b668fc535 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 8ae9424be1..3ec75b7f23 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 5a24b0271d..8e0266a54a 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 628bdea933..e8755f386f 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 e46cecbf14..a8649a046a 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 3af6f00c4a..12ed043c9c 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 f5d33421d1..ea8a25e32b 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 76bbc2a0e2..d68dc04aa0 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 1d1d8c9558..bb176e6892 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 c0de72cb6d..f1f31f2bb9 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 4cf8cd2011..03f3bd666e 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 57f5304812..4fd510ca60 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 822e6a6b6d..e1d4a73506 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 2c87fdf471..21b92652a6 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 54cb16c241..329207447e 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 e44908ec8d..5fde195e2a 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 ef1b7149e0..09be7bb696 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 75cf03f9b1..afdbe41bd8 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 c93449e765..7411562060 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 10632cd37e..ce0ce37aee 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 3bbb2d30e8..f6f9631b55 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 976ba27c80..12fd8c4204 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 bcb8472dc2..36be882fbf 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 3c3b4023a0..5b75622ed1 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 95d2789f50..a54d302728 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 e47e3a7c98..813aaaac68 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 4b3b66a03b..77e507cbfd 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 44cd279070..4538ced085 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 cbc3124db6..7aa204395e 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 48ff3d1a9e..31d443ba3a 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 172320b9bb..ac74b54f7f 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 2b354dcbd8..12ae11172c 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 aa38edc774..209b732b31 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 81d4d21d7d..d4e814ebbe 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 da43817c08..7881e8098f 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 284a2f3ac2..2f5480eea3 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 ff90d04f7a..a39fa96637 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 4024447a63..4535b54017 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 3221ea3547..4e21060db1 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 a20429d86c..1ec1b9a739 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 bdde75152f..46f1b57c3b 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 e7b79c94ff..b20ebe5d7a 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 632dff2ccb..5f87ca06bb 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 073c937a85..9f3dcd5041 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 10a4038f3b..a64ddd12eb 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 18412e810e..bd2f5c3799 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 4615fba3ef..96fee6b2cf 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 5a78498594..63e5216902 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 8715af737c..46c85290d1 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", };