mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 21:48:13 +00:00
LibJS: Implement per-locale display of calendars and date-time fields
This commit is contained in:
parent
adb762ee48
commit
4875ec26dd
4 changed files with 178 additions and 4 deletions
|
@ -22,6 +22,18 @@ describe("errors", () => {
|
|||
new Intl.DisplayNames("en", { type: "currency" }).of("hello!");
|
||||
}).toThrowWithMessage(RangeError, "hello! is not a valid value for option currency");
|
||||
});
|
||||
|
||||
test("invalid calendar", () => {
|
||||
expect(() => {
|
||||
new Intl.DisplayNames("en", { type: "calendar" }).of("hello!");
|
||||
}).toThrowWithMessage(RangeError, "hello! is not a valid value for option calendar");
|
||||
});
|
||||
|
||||
test("invalid dateTimeField", () => {
|
||||
expect(() => {
|
||||
new Intl.DisplayNames("en", { type: "dateTimeField" }).of("hello!");
|
||||
}).toThrowWithMessage(RangeError, "hello! is not a valid value for option dateTimeField");
|
||||
});
|
||||
});
|
||||
|
||||
describe("correct behavior", () => {
|
||||
|
@ -118,4 +130,122 @@ describe("correct behavior", () => {
|
|||
expect(es419.of("AAA")).toBe("AAA");
|
||||
expect(zhHant.of("AAA")).toBe("AAA");
|
||||
});
|
||||
|
||||
test("option type calendar", () => {
|
||||
// prettier-ignore
|
||||
const data = [
|
||||
{ calendar: "buddhist", en: "Buddhist Calendar", es419: "calendario budista", zhHant: "佛曆" },
|
||||
{ calendar: "chinese", en: "Chinese Calendar", es419: "calendario chino", zhHant: "農曆" },
|
||||
{ calendar: "coptic", en: "Coptic Calendar", es419: "calendario cóptico", zhHant: "科普特曆" },
|
||||
{ calendar: "dangi", en: "Dangi Calendar", es419: "calendario dangi", zhHant: "檀紀曆" },
|
||||
{ calendar: "ethioaa", en: "Ethiopic Amete Alem Calendar", es419: "calendario etíope Amete Alem", zhHant: "衣索比亞曆 (Amete Alem)" },
|
||||
{ calendar: "ethiopic", en: "Ethiopic Calendar", es419: "calendario etíope", zhHant: "衣索比亞曆" },
|
||||
{ calendar: "gregory", en: "Gregorian Calendar", es419: "calendario gregoriano", zhHant: "公曆" },
|
||||
{ calendar: "hebrew", en: "Hebrew Calendar", es419: "calendario hebreo", zhHant: "希伯來曆" },
|
||||
{ calendar: "indian", en: "Indian National Calendar", es419: "calendario nacional hindú", zhHant: "印度國曆" },
|
||||
{ calendar: "islamic", en: "Islamic Calendar", es419: "calendario islámico", zhHant: "伊斯蘭曆" },
|
||||
{ calendar: "islamic-civil", en: "Islamic Calendar (tabular, civil epoch)", es419: "calendario civil islámico", zhHant: "伊斯蘭民用曆" },
|
||||
{ calendar: "islamic-rgsa", en: "Islamic Calendar (Saudi Arabia, sighting)", es419: "calendario islámico (Arabia Saudita)", zhHant: "伊斯蘭新月曆" },
|
||||
{ calendar: "islamic-tbla", en: "Islamic Calendar (tabular, astronomical epoch)", es419: "calendario islámico tabular", zhHant: "伊斯蘭天文曆" },
|
||||
{ calendar: "islamic-umalqura", en: "Islamic Calendar (Umm al-Qura)", es419: "calendario islámico umalqura", zhHant: "烏姆庫拉曆" },
|
||||
{ calendar: "iso8601", en: "ISO-8601 Calendar", es419: "calendario ISO-8601", zhHant: "ISO 8601 國際曆法" },
|
||||
{ calendar: "japanese", en: "Japanese Calendar", es419: "calendario japonés", zhHant: "日本曆" },
|
||||
{ calendar: "persian", en: "Persian Calendar", es419: "calendario persa", zhHant: "波斯曆" },
|
||||
{ calendar: "roc", en: "Minguo Calendar", es419: "calendario de la República de China", zhHant: "國曆" },
|
||||
];
|
||||
|
||||
const en = new Intl.DisplayNames("en", { type: "calendar" });
|
||||
const es419 = new Intl.DisplayNames("es-419", { type: "calendar" });
|
||||
const zhHant = new Intl.DisplayNames("zh-Hant", { type: "calendar" });
|
||||
|
||||
data.forEach(d => {
|
||||
expect(en.of(d.calendar)).toBe(d.en);
|
||||
expect(es419.of(d.calendar)).toBe(d.es419);
|
||||
expect(zhHant.of(d.calendar)).toBe(d.zhHant);
|
||||
});
|
||||
});
|
||||
|
||||
test("option type dateTimeField, style long", () => {
|
||||
// prettier-ignore
|
||||
const data = [
|
||||
{ dateTimeField: "era", en: "era", es419: "era", zhHant: "年代" },
|
||||
{ dateTimeField: "year", en: "year", es419: "año", zhHant: "年" },
|
||||
{ dateTimeField: "quarter", en: "quarter", es419: "trimestre", zhHant: "季" },
|
||||
{ dateTimeField: "month", en: "month", es419: "mes", zhHant: "月" },
|
||||
{ dateTimeField: "weekOfYear", en: "week", es419: "semana", zhHant: "週" },
|
||||
{ dateTimeField: "weekday", en: "day of the week", es419: "día de la semana", zhHant: "週天" },
|
||||
{ dateTimeField: "day", en: "day", es419: "día", zhHant: "日" },
|
||||
{ dateTimeField: "dayPeriod", en: "AM/PM", es419: "a. m./p. m.", zhHant: "上午/下午" },
|
||||
{ dateTimeField: "hour", en: "hour", es419: "hora", zhHant: "小時" },
|
||||
{ dateTimeField: "minute", en: "minute", es419: "minuto", zhHant: "分鐘" },
|
||||
{ dateTimeField: "second", en: "second", es419: "segundo", zhHant: "秒" },
|
||||
{ dateTimeField: "timeZoneName", en: "time zone", es419: "zona horaria", zhHant: "時區" },
|
||||
];
|
||||
|
||||
const en = new Intl.DisplayNames("en", { type: "dateTimeField", style: "long" });
|
||||
const es419 = new Intl.DisplayNames("es-419", { type: "dateTimeField", style: "long" });
|
||||
const zhHant = new Intl.DisplayNames("zh-Hant", { type: "dateTimeField", style: "long" });
|
||||
|
||||
data.forEach(d => {
|
||||
expect(en.of(d.dateTimeField)).toBe(d.en);
|
||||
expect(es419.of(d.dateTimeField)).toBe(d.es419);
|
||||
expect(zhHant.of(d.dateTimeField)).toBe(d.zhHant);
|
||||
});
|
||||
});
|
||||
|
||||
test("option type dateTimeField, style short", () => {
|
||||
// prettier-ignore
|
||||
const data = [
|
||||
{ dateTimeField: "era", en: "era", es419: "era", zhHant: "年代" },
|
||||
{ dateTimeField: "year", en: "yr.", es419: "a", zhHant: "年" },
|
||||
{ dateTimeField: "quarter", en: "qtr.", es419: "trim.", zhHant: "季" },
|
||||
{ dateTimeField: "month", en: "mo.", es419: "m", zhHant: "月" },
|
||||
{ dateTimeField: "weekOfYear", en: "wk.", es419: "sem.", zhHant: "週" },
|
||||
{ dateTimeField: "weekday", en: "day of wk.", es419: "día de sem.", zhHant: "週天" },
|
||||
{ dateTimeField: "day", en: "day", es419: "d", zhHant: "日" },
|
||||
{ dateTimeField: "dayPeriod", en: "AM/PM", es419: "a.m./p.m.", zhHant: "上午/下午" },
|
||||
{ dateTimeField: "hour", en: "hr.", es419: "h", zhHant: "小時" },
|
||||
{ dateTimeField: "minute", en: "min.", es419: "min", zhHant: "分鐘" },
|
||||
{ dateTimeField: "second", en: "sec.", es419: "s", zhHant: "秒" },
|
||||
{ dateTimeField: "timeZoneName", en: "zone", es419: "zona", zhHant: "時區" },
|
||||
];
|
||||
|
||||
const en = new Intl.DisplayNames("en", { type: "dateTimeField", style: "short" });
|
||||
const es419 = new Intl.DisplayNames("es-419", { type: "dateTimeField", style: "short" });
|
||||
const zhHant = new Intl.DisplayNames("zh-Hant", { type: "dateTimeField", style: "short" });
|
||||
|
||||
data.forEach(d => {
|
||||
expect(en.of(d.dateTimeField)).toBe(d.en);
|
||||
expect(es419.of(d.dateTimeField)).toBe(d.es419);
|
||||
expect(zhHant.of(d.dateTimeField)).toBe(d.zhHant);
|
||||
});
|
||||
});
|
||||
|
||||
test("option type dateTimeField, style narrow", () => {
|
||||
// prettier-ignore
|
||||
const data = [
|
||||
{ dateTimeField: "era", en: "era", es419: "era", zhHant: "年代" },
|
||||
{ dateTimeField: "year", en: "yr.", es419: "a", zhHant: "年" },
|
||||
{ dateTimeField: "quarter", en: "qtr.", es419: "trim.", zhHant: "季" },
|
||||
{ dateTimeField: "month", en: "mo.", es419: "m", zhHant: "月" },
|
||||
{ dateTimeField: "weekOfYear", en: "wk.", es419: "sem.", zhHant: "週" },
|
||||
{ dateTimeField: "weekday", en: "day of wk.", es419: "día de sem.", zhHant: "週天" },
|
||||
{ dateTimeField: "day", en: "day", es419: "d", zhHant: "日" },
|
||||
{ dateTimeField: "dayPeriod", en: "AM/PM", es419: "a.m./p.m.", zhHant: "上午/下午" },
|
||||
{ dateTimeField: "hour", en: "hr.", es419: "h", zhHant: "小時" },
|
||||
{ dateTimeField: "minute", en: "min.", es419: "min", zhHant: "分鐘" },
|
||||
{ dateTimeField: "second", en: "sec.", es419: "s", zhHant: "秒" },
|
||||
{ dateTimeField: "timeZoneName", en: "zone", es419: "zona", zhHant: "時區" },
|
||||
];
|
||||
|
||||
const en = new Intl.DisplayNames("en", { type: "dateTimeField", style: "narrow" });
|
||||
const es419 = new Intl.DisplayNames("es-419", { type: "dateTimeField", style: "narrow" });
|
||||
const zhHant = new Intl.DisplayNames("zh-Hant", { type: "dateTimeField", style: "narrow" });
|
||||
|
||||
data.forEach(d => {
|
||||
expect(en.of(d.dateTimeField)).toBe(d.en);
|
||||
expect(es419.of(d.dateTimeField)).toBe(d.es419);
|
||||
expect(zhHant.of(d.dateTimeField)).toBe(d.zhHant);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue