mirror of
https://github.com/tc39/test262.git
synced 2025-07-27 07:54:41 +02:00
Temporal: Add coverage for formatting each Temporal object with only one component
Adds a test for each Temporal object's toLocaleString() method, formatting them with only one option e.g. { year: 'numeric' } and comparing it with the corresponding output for legacy Date. See tc39/proposal-temporal#2796.
This commit is contained in:
parent
459cef7185
commit
9e6ab9bb02
32
test/intl402/Temporal/Instant/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
32
test/intl402/Temporal/Instant/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.instant.prototype.tolocalestring
|
||||||
|
description: Each date and time component can be formatted individually
|
||||||
|
locale: [en]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const epochNs = BigInt(epochMs) * 1_000_000n;
|
||||||
|
const legacyDate = new Date(epochMs);
|
||||||
|
const instant = new Temporal.Instant(epochNs);
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "year": "numeric" },
|
||||||
|
{ "month": "long" },
|
||||||
|
{ "day": "numeric" },
|
||||||
|
{ "weekday": "long" },
|
||||||
|
{ "hour": "numeric" },
|
||||||
|
{ "minute": "numeric" },
|
||||||
|
{ "second": "numeric" },
|
||||||
|
{ "fractionalSecondDigits": 3 },
|
||||||
|
{ "dayPeriod": "short" },
|
||||||
|
{ "timeZoneName": "short" },
|
||||||
|
// "era" is skipped; it implies year, month, and day in "en" locale
|
||||||
|
]) {
|
||||||
|
const instantResult = instant.toLocaleString("en", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en", options);
|
||||||
|
assert.sameValue(instantResult, legacyDateResult, `Instant.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
25
test/intl402/Temporal/PlainDate/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
25
test/intl402/Temporal/PlainDate/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plaindate.prototype.tolocalestring
|
||||||
|
description: Each date component can be formatted individually
|
||||||
|
locale: [en]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const legacyDate = new Date(epochMs);
|
||||||
|
const plainDate = new Temporal.PlainDate(2024, 12, 26);
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "year": "numeric" },
|
||||||
|
{ "month": "long" },
|
||||||
|
{ "day": "numeric" },
|
||||||
|
{ "weekday": "long" },
|
||||||
|
// "era" is skipped; it implies year, month, and day in "en" locale
|
||||||
|
]) {
|
||||||
|
const plainDateResult = plainDate.toLocaleString("en", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en", options);
|
||||||
|
assert.sameValue(plainDateResult, legacyDateResult, `Instant.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
31
test/intl402/Temporal/PlainDateTime/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
31
test/intl402/Temporal/PlainDateTime/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plaindatetime.prototype.tolocalestring
|
||||||
|
description: Each date and time component can be formatted individually
|
||||||
|
locale: [en]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const legacyDateLocal = new Date(epochMs);
|
||||||
|
const legacyDate = new Date(epochMs + legacyDateLocal.getTimezoneOffset() * 60 * 1000);
|
||||||
|
const plainDateTime = new Temporal.PlainDateTime(2024, 12, 26, 11, 46, 40, 321);
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "year": "numeric" },
|
||||||
|
{ "month": "long" },
|
||||||
|
{ "day": "numeric" },
|
||||||
|
{ "weekday": "long" },
|
||||||
|
{ "hour": "numeric" },
|
||||||
|
{ "minute": "numeric" },
|
||||||
|
{ "second": "numeric" },
|
||||||
|
{ "fractionalSecondDigits": 3 },
|
||||||
|
{ "dayPeriod": "short" },
|
||||||
|
// "era" is skipped; it implies year, month, and day in "en" locale
|
||||||
|
]) {
|
||||||
|
const plainDateTimeResult = plainDateTime.toLocaleString("en", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en", options);
|
||||||
|
assert.sameValue(plainDateTimeResult, legacyDateResult, `PlainDateTime.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
22
test/intl402/Temporal/PlainMonthDay/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
22
test/intl402/Temporal/PlainMonthDay/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plainmonthday.prototype.tolocalestring
|
||||||
|
description: Each date component can be formatted individually
|
||||||
|
locale: [en-u-ca-iso8601]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const legacyDate = new Date(epochMs);
|
||||||
|
const plainMonthDay = new Temporal.PlainMonthDay(12, 26);
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "month": "long" },
|
||||||
|
{ "day": "numeric" },
|
||||||
|
]) {
|
||||||
|
const plainMonthDayResult = plainMonthDay.toLocaleString("en-u-ca-iso8601", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en-u-ca-iso8601", options);
|
||||||
|
assert.sameValue(plainMonthDayResult, legacyDateResult, `PlainMonthDay.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
26
test/intl402/Temporal/PlainTime/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
26
test/intl402/Temporal/PlainTime/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plaintime.prototype.tolocalestring
|
||||||
|
description: Each time component can be formatted individually
|
||||||
|
locale: [en]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const legacyDateLocal = new Date(epochMs);
|
||||||
|
const legacyDate = new Date(epochMs + legacyDateLocal.getTimezoneOffset() * 60 * 1000);
|
||||||
|
const plainTime = new Temporal.PlainTime(11, 46, 40, 321);
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "hour": "numeric" },
|
||||||
|
{ "minute": "numeric" },
|
||||||
|
{ "second": "numeric" },
|
||||||
|
{ "fractionalSecondDigits": 3 },
|
||||||
|
{ "dayPeriod": "short" },
|
||||||
|
]) {
|
||||||
|
const plainTimeResult = plainTime.toLocaleString("en", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en", options);
|
||||||
|
assert.sameValue(plainTimeResult, legacyDateResult, `PlainTime.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
23
test/intl402/Temporal/PlainYearMonth/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
23
test/intl402/Temporal/PlainYearMonth/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.plainyearmonth.prototype.tolocalestring
|
||||||
|
description: Each date and time component can be formatted individually
|
||||||
|
locale: [en-u-ca-iso8601]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const legacyDate = new Date(epochMs);
|
||||||
|
const plainYearMonth = new Temporal.PlainYearMonth(2024, 12);
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "year": "numeric" },
|
||||||
|
{ "month": "long" },
|
||||||
|
// "era" is skipped; it implies year, month, and day in "en" locale
|
||||||
|
]) {
|
||||||
|
const plainYearMonthResult = plainYearMonth.toLocaleString("en-u-ca-iso8601", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en-u-ca-iso8601", options);
|
||||||
|
assert.sameValue(plainYearMonthResult, legacyDateResult, `Instant.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
32
test/intl402/Temporal/ZonedDateTime/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
32
test/intl402/Temporal/ZonedDateTime/prototype/toLocaleString/lone-options-accepted.js
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-temporal.instant.prototype.tolocalestring
|
||||||
|
description: Each date and time component can be formatted individually
|
||||||
|
locale: [en, en-u-tz-utc]
|
||||||
|
features: [Temporal]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const epochMs = 1735213600_321; // 2024-12-26T11:46:40.321Z
|
||||||
|
const epochNs = BigInt(epochMs) * 1_000_000n;
|
||||||
|
const legacyDate = new Date(epochMs);
|
||||||
|
const zonedDateTime = new Temporal.ZonedDateTime(epochNs, "UTC");
|
||||||
|
|
||||||
|
for (const options of [
|
||||||
|
{ "year": "numeric" },
|
||||||
|
{ "month": "long" },
|
||||||
|
{ "day": "numeric" },
|
||||||
|
{ "weekday": "long" },
|
||||||
|
{ "hour": "numeric" },
|
||||||
|
{ "minute": "numeric" },
|
||||||
|
{ "second": "numeric" },
|
||||||
|
{ "fractionalSecondDigits": 3 },
|
||||||
|
{ "dayPeriod": "short" },
|
||||||
|
{ "timeZoneName": "short" },
|
||||||
|
// "era" is skipped; it implies year, month, and day in "en" locale
|
||||||
|
]) {
|
||||||
|
const zonedDateTimeResult = zonedDateTime.toLocaleString("en", options);
|
||||||
|
const legacyDateResult = legacyDate.toLocaleString("en", { ...options, timeZone: "UTC" });
|
||||||
|
assert.sameValue(zonedDateTimeResult, legacyDateResult, `ZonedDateTime.toLocaleString should format lone option ${JSON.stringify(options)}`);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user