Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Test using "era" option for all possible calendars. The exact formatted
// result is not tested, it should only be consistent with the resolved options.
const eras = [
"long", "short", "narrow",
];
const dates = [
// Far past
new Date(-100000, 0, 1),
// Start of epoch.
new Date(0),
// Far future
new Date(+100000, 0, 1),
];
for (let calendar of Intl.supportedValuesOf("calendar")) {
for (let era of eras) {
let dtf = new Intl.DateTimeFormat("en", {calendar, era});
let resolved = dtf.resolvedOptions();
for (let date of dates) {
let parts = dtf.formatToParts(date);
// Ensure there's an "era" part when the resolved options include "era".
assertEq(parts.some(p => p.type === "era"), Object.hasOwn(resolved, "era"));
// Resolved options should always contain year, month, and day.
assertEq(Object.hasOwn(resolved, "year"), true);
assertEq(Object.hasOwn(resolved, "month"), true);
assertEq(Object.hasOwn(resolved, "day"), true);
// The corresponding format parts are also always present.
assertEq(parts.some(p => p.type === "year" || p.type === "relatedYear"), true);
assertEq(parts.some(p => p.type === "month"), true);
assertEq(parts.some(p => p.type === "day"), true)
}
}
}
if (typeof reportCompare === "function")
reportCompare(0, 0, "ok");