Test all combinations in temporal-plaindate-formatting-datetime-style

This commit is contained in:
André Bargull 2025-05-22 11:58:30 +02:00 committed by Ms2ger
parent c3db26368f
commit 24f6f7a014

View File

@ -8,57 +8,77 @@ locale: [en-US]
features: [Temporal] features: [Temporal]
---*/ ---*/
const dateFormatterShort = new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeZone: "Pacific/Apia" }); const locale = "en-US";
const dateFormatterMedium = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeZone: "Pacific/Apia" }); const timeZone = "Pacific/Apia";
const dateFormatterLong = new Intl.DateTimeFormat("en-US", { dateStyle: "long", timeZone: "Pacific/Apia" });
const dateFormatterFull = new Intl.DateTimeFormat("en-US", { dateStyle: "full", timeZone: "Pacific/Apia" }); const dateStyles = [
const timeFormatterShort = new Intl.DateTimeFormat("en-US", { timeStyle: "short", timeZone: "Pacific/Apia" }); "full", "long", "medium", "short",
const timeFormatterMedium = new Intl.DateTimeFormat("en-US", { timeStyle: "medium", timeZone: "Pacific/Apia" }); ];
const timeFormatterLong = new Intl.DateTimeFormat("en-US", { timeStyle: "long", timeZone: "Pacific/Apia" });
const timeFormatterFull = new Intl.DateTimeFormat("en-US", { timeStyle: "full", timeZone: "Pacific/Apia" }); const timeStyles = [
const dateTimeFormatterShort = new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeStyle: "short", timeZone: "Pacific/Apia" }); "full", "long", "medium", "short",
const dateTimeFormatterMedium = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeStyle: "medium", timeZone: "Pacific/Apia" }); ];
const dateTimeFormatterLong = new Intl.DateTimeFormat("en-US", { dateStyle: "long", timeStyle: "long", timeZone: "Pacific/Apia" });
const dateTimeFormatterFull = new Intl.DateTimeFormat("en-US", { dateStyle: "full", timeStyle: "full", timeZone: "Pacific/Apia" });
const dateTimeFormatterShortLong = new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeStyle: "long", timeZone: "Pacific/Apia" });
const dateTimeFormatterShortMedium = new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeStyle: "medium", timeZone: "Pacific/Apia" });
const dateTimeFormatterShortFull = new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeStyle: "full", timeZone: "Pacific/Apia" });
const dateTimeFormatterMediumLong = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeStyle: "long", timeZone: "Pacific/Apia" });
const dateTimeFormatterMediumShort = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeStyle: "short", timeZone: "Pacific/Apia" });
const dateTimeFormatterMediumFull = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeStyle: "full", timeZone: "Pacific/Apia" });
const dateTimeFormatterLongMedium = new Intl.DateTimeFormat("en-US", { dateStyle: "long", timeStyle: "medium", timeZone: "Pacific/Apia" });
const dateTimeFormatterLongShort = new Intl.DateTimeFormat("en-US", { dateStyle: "long", timeStyle: "short", timeZone: "Pacific/Apia" });
const dateTimeFormatterLongFull = new Intl.DateTimeFormat("en-US", { dateStyle: "long", timeStyle: "full", timeZone: "Pacific/Apia" });
const dateTimeFormatterFullMedium = new Intl.DateTimeFormat("en-US", { dateStyle: "full", timeStyle: "medium", timeZone: "Pacific/Apia" });
const dateTimeFormatterFullShort = new Intl.DateTimeFormat("en-US", { dateStyle: "full", timeStyle: "short", timeZone: "Pacific/Apia" });
const dateTimeFormatterFullLong = new Intl.DateTimeFormat("en-US", { dateStyle: "full", timeStyle: "long", timeZone: "Pacific/Apia" });
const date = new Temporal.PlainDate(2021, 8, 4); const date = new Temporal.PlainDate(2021, 8, 4);
const dateShort = dateFormatterShort.format(date); const expected = {
/* // "Wednesday, August 4, 2021"
To avoid requiring an exact format for the output of locale-dependent functions, full: {
don't run these tests, but they're left here as documentation for what the output year: ["2021", true],
should roughly look like. month: ["8", false],
*/ day: ["4", true],
// assert.sameValue(dateShort, "8/4/21", "plain date, dateStyle=short"); },
const dateMedium = dateFormatterMedium.format(date);
// assert.sameValue(dateMedium, "Aug 4, 2021", "plain date, dateStyle=medium"); // "August 4, 2021"
const dateLong = dateFormatterLong.format(date); long: {
// assert.sameValue(dateLong, "August 4, 2021", "plain date, dateStyle=long"); year: ["2021", true],
const dateFull = dateFormatterFull.format(date); month: ["8", false],
// assert.sameValue(dateFull, "Wednesday, August 4, 2021", "plain date, dateStyle=full"); day: ["4", true],
assert.throws(TypeError, () => timeFormatterShort.format(date), "plain date, timeStyle=short"); },
assert.throws(TypeError, () => timeFormatterMedium.format(date), "plain date, timeStyle=medium");
assert.throws(TypeError, () => timeFormatterLong.format(date), "plain date, timeStyle=long"); // "Aug 4, 2021"
assert.throws(TypeError, () => timeFormatterFull.format(date), "plain date, timeStyle=full"); medium: {
var result = dateTimeFormatterShort.format(date); year: ["2021", true],
assert.sameValue(result, dateShort, "plain date, dateStyle = timeStyle = short"); month: ["8", false],
result = dateTimeFormatterMedium.format(date); day: ["4", true],
assert.sameValue(result, dateMedium, "plain date, dateStyle = timeStyle = medium"); },
result = dateTimeFormatterLong.format(date);
assert.sameValue(result, dateLong, "plain date, dateStyle = timeStyle = long"); // "8/4/21"
result = dateTimeFormatterFull.format(date); short: {
assert.sameValue(result, dateFull, "plain date, dateStyle = timeStyle = full"); year: ["21", true],
result = dateTimeFormatterShortLong.format(date); month: ["8", true],
assert.sameValue(result, dateShort, "plain date, dateStyle = short, timeStyle = long"); day: ["4", true],
},
};
function ensureDateField(result, field, dateStyle) {
let [searchValue, present] = expected[dateStyle][field];
let verb = present ? "should" : "should not";
assert.sameValue(
result.includes(searchValue),
present,
`dateStyle=${dateStyle}: ${field} ${verb} appear`
);
}
// timeStyle throws when no dateStyle is present.
for (let timeStyle of timeStyles) {
let dtf = new Intl.DateTimeFormat(locale, {timeStyle, timeZone});
assert.throws(TypeError, () => dtf.format(date), `timeStyle=${timeStyle}`);
}
for (let dateStyle of dateStyles) {
let dtf = new Intl.DateTimeFormat(locale, {dateStyle, timeZone});
let result = dtf.format(date);
ensureDateField(result, "year", dateStyle);
ensureDateField(result, "month", dateStyle);
ensureDateField(result, "day", dateStyle);
// timeStyle is ignored when dateStyle is present.
for (let timeStyle of timeStyles) {
let dtf = new Intl.DateTimeFormat(locale, {dateStyle, timeStyle, timeZone});
assert.sameValue(dtf.format(date), result, `dateStyle = ${dateStyle}, timeStyle = ${timeStyle}`);
}
}