Skip to content

Commit

Permalink
Allow alternative era names
Browse files Browse the repository at this point in the history
Temporal doesn't specify concrete era names, so tests shouldn't assert
for example that the era code of the current Gregorian era is `"ce"`. We
still want to validate the era names somehow however, so allow alternative
era names using the era codes from the "Intl era and monthCode" proposal.
  • Loading branch information
anba committed Jul 10, 2024
1 parent 08e1aa8 commit e4899d2
Showing 1 changed file with 104 additions and 3 deletions.
107 changes: 104 additions & 3 deletions harness/temporalHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,95 @@ var TemporalHelpers = {
{ month: 12, monthCode: "M12", daysInMonth: 31 }
],

/*
* List of known calendar eras and their possible aliases.
*
* https://tc39.es/proposal-intl-era-monthcode/#table-eras
*/
CalendarEras: {
buddhist: [
{ era: "buddhist", aliases: ["be"] },
],
chinese: [
{ era: "chinese" },
],
coptic: [
{ era: "coptic" },
{ era: "coptic-inverse" },
],
dangi: [
{ era: "dangi" },
],
ethiopic: [
{ era: "ethiopic", aliases: ["incar"] },
{ era: "ethioaa", aliases: ["ethiopic-amete-alem", "mundi"] },
],
ethioaa: [
{ era: "ethioaa", aliases: ["ethiopic-amete-alem", "mundi"] },
],
gregory: [
{ era: "gregory", aliases: ["ce", "ad"] },
{ era: "gregory-inverse", aliases: ["bc", "bce"] },
],
hebrew: [
{ era: "hebrew", aliases: ["am"] },
],
indian: [
{ era: "indian", aliases: ["saka"] },
],
islamic: [
{ era: "islamic", aliases: ["ah"] },
],
"islamic-civil": [
{ era: "islamic-civil", aliases: ["islamicc", "ah"] },
],
"islamic-rgsa": [
{ era: "islamic-rgsa", aliases: ["ah"] },
],
"islamic-tbla": [
{ era: "islamic-tbla", aliases: ["ah"] },
],
"islamic-umalqura": [
{ era: "islamic-umalqura", aliases: ["ah"] },
],
japanese: [
{ era: "heisei" },
{ era: "japanese", aliases: ["gregory", "ad", "ce"] },
{ era: "japanese-inverse", aliases: ["gregory-inverse", "bc", "bce"] },
{ era: "meiji" },
{ era: "reiwa" },
{ era: "showa" },
{ era: "taisho" },
],
persian: [
{ era: "persian", aliases: ["ap"] },
],
roc: [
{ era: "roc", aliases: ["minguo"] },
{ era: "roc-inverse", aliases: ["before-roc"] },
],
},

/*
* Return the canonical era code.
*/
canonicalizeEraInCalendar(temporalObject, eraName) {
if (eraName === undefined) {
return undefined;
}
assert.sameValue(typeof eraName, "string");

let calendarId = temporalObject.calendarId;
assert(Object.hasOwn(TemporalHelpers.CalendarEras, calendarId));

for (let {era, aliases = []} of TemporalHelpers.CalendarEras[calendarId]) {
if (era === eraName || aliases.includes(eraName)) {
return era;
}
}
throw new Test262Error(`Unsupported era name: ${eraName}`);
},

/*
* assertDuration(duration, years, ..., nanoseconds[, description]):
*
Expand Down Expand Up @@ -132,7 +221,11 @@ var TemporalHelpers = {
assertPlainDate(date, year, month, monthCode, day, description = "", era = undefined, eraYear = undefined) {
const prefix = description ? `${description}: ` : "";
assert(date instanceof Temporal.PlainDate, `${prefix}instanceof`);
assert.sameValue(date.era, era, `${prefix}era result:`);
assert.sameValue(
TemporalHelpers.canonicalizeEraInCalendar(date, date.era),
TemporalHelpers.canonicalizeEraInCalendar(date, era),
`${prefix}era result:`
);
assert.sameValue(date.eraYear, eraYear, `${prefix}eraYear result:`);
assert.sameValue(date.year, year, `${prefix}year result:`);
assert.sameValue(date.month, month, `${prefix}month result:`);
Expand All @@ -151,7 +244,11 @@ var TemporalHelpers = {
assertPlainDateTime(datetime, year, month, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond, description = "", era = undefined, eraYear = undefined) {
const prefix = description ? `${description}: ` : "";
assert(datetime instanceof Temporal.PlainDateTime, `${prefix}instanceof`);
assert.sameValue(datetime.era, era, `${prefix}era result:`);
assert.sameValue(
TemporalHelpers.canonicalizeEraInCalendar(datetime, datetime.era),
TemporalHelpers.canonicalizeEraInCalendar(datetime, era),
`${prefix}era result:`
);
assert.sameValue(datetime.eraYear, eraYear, `${prefix}eraYear result:`);
assert.sameValue(datetime.year, year, `${prefix}year result:`);
assert.sameValue(datetime.month, month, `${prefix}month result:`);
Expand Down Expand Up @@ -242,7 +339,11 @@ var TemporalHelpers = {
assertPlainYearMonth(yearMonth, year, month, monthCode, description = "", era = undefined, eraYear = undefined, referenceISODay = 1) {
const prefix = description ? `${description}: ` : "";
assert(yearMonth instanceof Temporal.PlainYearMonth, `${prefix}instanceof`);
assert.sameValue(yearMonth.era, era, `${prefix}era result:`);
assert.sameValue(
TemporalHelpers.canonicalizeEraInCalendar(yearMonth, yearMonth.era),
TemporalHelpers.canonicalizeEraInCalendar(yearMonth, era),
`${prefix}era result:`
);
assert.sameValue(yearMonth.eraYear, eraYear, `${prefix}eraYear result:`);
assert.sameValue(yearMonth.year, year, `${prefix}year result:`);
assert.sameValue(yearMonth.month, month, `${prefix}month result:`);
Expand Down

0 comments on commit e4899d2

Please sign in to comment.