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

This commit is contained in:
André Bargull 2025-05-22 11:57:32 +02:00 committed by Ms2ger
parent 36c81b9761
commit c3db26368f

View File

@ -8,65 +8,94 @@ 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 timeFormatterShort = new Intl.DateTimeFormat("en-US", { timeStyle: "short", timeZone: "Pacific/Apia" });
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 dateTimeFormatterShort = new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeStyle: "short", timeZone: "Pacific/Apia" });
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 dateStyles = [
"full", "long", "medium", "short",
];
const timeStyles = [
"full", "long", "medium", "short",
];
// Use a PlainTime with unique values in each field, so as to make it easier
// to test which values appear in the formatted output
const time = new Temporal.PlainTime(0, 34, 56, 777, 888, 999); const time = new Temporal.PlainTime(0, 34, 56, 777, 888, 999);
assert.throws(TypeError, () => dateFormatterShort.format(time), "plain time, dateStyle=short"); const expected = {
assert.throws(TypeError, () => dateFormatterMedium.format(time), "plain time, dateStyle=medium"); // "12:34:56 AM"
assert.throws(TypeError, () => dateFormatterLong.format(time), "plain time, dateStyle=long"); full: {
hour: true,
minute: true,
second: true,
millisecond: false,
microsecond: false,
nanosecond: false,
},
const timeResultShort = timeFormatterShort.format(time); // "12:34:56 AM"
// assert.sameValue(timeResultShort, "12:34 AM", "plain time, timeStyle=short"); long: {
assert.notSameValue(timeResultShort.search("12"), -1, "plainTime, timeStyle=short: hour should appear"); hour: true,
assert.sameValue(timeResultShort.search("56"), -1, "plainTime, timeStyle=short: seconds should not appear"); minute: true,
second: true,
millisecond: false,
microsecond: false,
nanosecond: false,
},
const timeResultMedium = timeFormatterMedium.format(time); // "12:34:56 AM"
// assert.sameValue(timeResultMedium, "12:34:56 AM", "plain time, timeStyle=medium"); medium: {
assert.notSameValue(timeResultMedium.search("56"), -1, "plainTime, timeStyle=medium: seconds should appear"); hour: true,
assert.sameValue(timeResultMedium.search("777"), -1, "plainTime, timeStyle=medium: milliseconds should not appear"); minute: true,
second: true,
millisecond: false,
microsecond: false,
nanosecond: false,
},
const timeResultLong = timeFormatterLong.format(time); // "12:34 AM"
// assert.sameValue(timeResultLong, "12:34:56 AM", "plain time, timeStyle=long"); short: {
assert.notSameValue(timeResultMedium.search("34"), -1, "plainTime, timeStyle=long: minutes should appear"); hour: true,
assert.sameValue(timeResultMedium.search("888"), -1, "plainTime, timeStyle=long: microseconds should not appear"); minute: true,
second: false,
millisecond: false,
microsecond: false,
nanosecond: false,
},
};
var timeResult = dateTimeFormatterShort.format(time); function ensureTimeField(result, field, value, timeStyle) {
assert.sameValue(timeResult, timeResultShort, "plain time, dateStyle = timeStyle = short"); let present = expected[timeStyle][field];
let verb = present ? "should" : "should not";
timeResult = dateTimeFormatterMedium.format(time); assert.sameValue(
assert.sameValue(timeResult, timeResultMedium, "plain time, dateStyle = timeStyle = medium"); result.includes(value),
present,
`timeStyle=${timeStyle}: ${field} ${verb} appear`
);
}
timeResult = dateTimeFormatterLong.format(time); // dateStyle throws when no timeStyle is present.
assert.sameValue(timeResult, timeResultLong, "plain time, dateStyle = timeStyle = long"); for (let dateStyle of dateStyles) {
let dtf = new Intl.DateTimeFormat(locale, {dateStyle, timeZone});
assert.throws(TypeError, () => dtf.format(time), `dateStyle=${dateStyle}`);
}
timeResult = dateTimeFormatterFull.format(time); for (let timeStyle of timeStyles) {
assert.sameValue(timeResult, timeResultLong, "plain time, dateStyle = timeStyle = full"); let dtf = new Intl.DateTimeFormat(locale, {timeStyle, timeZone});
let result = dtf.format(time);
timeResult = dateTimeFormatterShortLong.format(time);
assert.sameValue(timeResult, timeResultLong, "plain time, dateStyle = short, timeStyle = long");
ensureTimeField(result, "hour", "12", timeStyle);
ensureTimeField(result, "minute", "34", timeStyle);
ensureTimeField(result, "second", "56", timeStyle);
ensureTimeField(result, "millisecond", "777", timeStyle);
ensureTimeField(result, "microsecond", "888", timeStyle);
ensureTimeField(result, "nanosecond", "999", timeStyle);
// dateStyle is ignored when timeStyle is present.
for (let dateStyle of dateStyles) {
let dtf = new Intl.DateTimeFormat(locale, {dateStyle, timeStyle, timeZone});
assert.sameValue(dtf.format(time), result, `dateStyle = ${dateStyle}, timeStyle = ${timeStyle}`);
}
}