mirror of
https://github.com/tc39/test262.git
synced 2025-07-25 06:55:06 +02:00
Update UTC time zone canonicalization to match proposal-canonical-tz
The test for https://github.com/tc39/ecma402/pull/724 (added in https://github.com/tc39/test262/pull/4328) didn't take the Time Zone Canonicalization proposal into account; but it should, because that proposal is stage 3. As of that proposal, the [[TimeZone]] slot of DateTimeFormat gets the case-regularized original identifier, no longer the primary identifier. So the resolvedOptions().timeZone property also no longer returns the primary identifier.
This commit is contained in:
parent
e611532c98
commit
48bb262183
@ -2,25 +2,33 @@
|
|||||||
// This code is governed by the BSD license found in the LICENSE file.
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
/*---
|
/*---
|
||||||
esid: sec-createdatetimeformat
|
esid: sec-createdatetimeformat
|
||||||
description: Tests that the time zone names "Etc/UTC", "Etc/GMT", and "GMT" all resolve to "UTC".
|
description: >
|
||||||
|
Tests that the time zone names "Etc/UTC", "Etc/GMT", and "GMT" are not
|
||||||
|
canonicalized to "UTC" in "resolvedOptions".
|
||||||
info: |
|
info: |
|
||||||
CreateDateTimeFormat ( dateTimeFormat, locales, options, required, default )
|
CreateDateTimeFormat ( dateTimeFormat, locales, options, required, default )
|
||||||
|
|
||||||
29. If IsTimeZoneOffsetString(timeZone) is true, then
|
30. If IsTimeZoneOffsetString(timeZone) is true, then
|
||||||
...
|
...
|
||||||
30. Else,
|
31. Else,
|
||||||
a. Let timeZoneIdentifierRecord be GetAvailableNamedTimeZoneIdentifier(timeZone).
|
a. Let timeZoneIdentifierRecord be GetAvailableNamedTimeZoneIdentifier(timeZone).
|
||||||
|
...
|
||||||
|
c. Set timeZone to timeZoneIdentifierRecord.[[Identifier]].
|
||||||
|
|
||||||
GetAvailableNamedTimeZoneIdentifier ( timeZoneIdentifier )
|
GetAvailableNamedTimeZoneIdentifier ( timeZoneIdentifier )
|
||||||
|
|
||||||
...
|
1. For each element record of AvailableNamedTimeZoneIdentifiers(), do
|
||||||
5. For each element identifier of identifiers, do
|
a. If record.[[Identifier]] is an ASCII-case-insensitive match for
|
||||||
...
|
timeZoneIdentifier, return record.
|
||||||
c. If primary is one of "Etc/UTC", "Etc/GMT", or "GMT", set primary to "UTC".
|
|
||||||
|
features: [canonical-tz]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
const utcIdentifiers = ["Etc/GMT", "Etc/UTC", "GMT"];
|
const utcIdentifiers = ["Etc/GMT", "Etc/UTC", "GMT"];
|
||||||
|
|
||||||
for (const timeZone of utcIdentifiers) {
|
for (const timeZone of utcIdentifiers) {
|
||||||
assert.sameValue(new Intl.DateTimeFormat([], {timeZone}).resolvedOptions().timeZone, "UTC", "Time zone name " + timeZone + " not canonicalized to 'UTC'.");
|
assert.sameValue(
|
||||||
|
new Intl.DateTimeFormat([], {timeZone}).resolvedOptions().timeZone,
|
||||||
|
timeZone,
|
||||||
|
"Time zone name " + timeZone + " should be preserved and not canonicalized to 'UTC'");
|
||||||
}
|
}
|
||||||
|
40
test/intl402/Temporal/ZonedDateTime/prototype/equals/canonicalize-utc-timezone.js
vendored
Normal file
40
test/intl402/Temporal/ZonedDateTime/prototype/equals/canonicalize-utc-timezone.js
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright 2025 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.zoneddatetime.prototype.equals
|
||||||
|
description: >
|
||||||
|
Tests that the time zone names "Etc/UTC", "Etc/GMT", and "GMT" are equal to,
|
||||||
|
but not canonicalized to, "UTC".
|
||||||
|
info: |
|
||||||
|
Temporal.ZonedDateTime.prototype.equals ( other )
|
||||||
|
|
||||||
|
...
|
||||||
|
5. If TimeZoneEquals(zonedDateTime.[[TimeZone]], other.[[TimeZone]]) is false,
|
||||||
|
return false.
|
||||||
|
|
||||||
|
TimeZoneEquals ( one, two )
|
||||||
|
|
||||||
|
...
|
||||||
|
4.a. Let recordOne be GetAvailableNamedTimeZoneIdentifier(one).
|
||||||
|
b. Let recordTwo be GetAvailableNamedTimeZoneIdentifier(two).
|
||||||
|
c. If recordOne is not empty and recordTwo is not empty and
|
||||||
|
recordOne.[[PrimaryIdentifier]] is recordTwo.[[PrimaryIdentifier]],
|
||||||
|
return true.
|
||||||
|
|
||||||
|
features: [canonical-tz, Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var utcDateTime = new Temporal.ZonedDateTime(0n, "UTC");
|
||||||
|
assert.sameValue(utcDateTime.timeZoneId, "UTC", "Time zone name 'UTC' is preserved");
|
||||||
|
|
||||||
|
var utcIdentifiers = ["Etc/GMT", "Etc/UTC", "GMT"];
|
||||||
|
|
||||||
|
for (var ix = 0; ix < utcIdentifiers.length; ix++) {
|
||||||
|
var timeZone = utcIdentifiers[ix];
|
||||||
|
var dateTime = new Temporal.ZonedDateTime(0n, timeZone);
|
||||||
|
assert.sameValue(
|
||||||
|
dateTime.timeZoneId,
|
||||||
|
utcDateTime.timeZoneId,
|
||||||
|
timeZone + " should be preserved and not canonicalized to UTC");
|
||||||
|
assert(dateTime.equals(utcDateTime), "Time zone " + timeZone + " should be equal to primary identifier UTC");
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user