Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| shell-option(--enable-intl-locale-info) skip-if(!this.hasOwnProperty('Intl')||!this.Intl.Locale.prototype.hasOwnProperty('getHourCycles'))
// Hour cycle information from CLDR, search for the <timeData> element in
function hourCycles(tag) {
return new Intl.Locale(tag).getHourCycles();
}
// Unknown language, script, and region should all give the same results.
assertEqArray(hourCycles("und"), ["h12", "h23"]);
assertEqArray(hourCycles("und-ZZ"), ["h23"]);
assertEqArray(hourCycles("und-Zzzz"), ["h12", "h23"]);
assertEqArray(hourCycles("und-Zzzz-ZZ"), ["h23"]);
// Simple tests using "en".
assertEqArray(hourCycles("en"), ["h12", "h23"]);
assertEqArray(hourCycles("en-US"), ["h12", "h23"]);
assertEqArray(hourCycles("en-ZZ"), ["h23"]);
assertEqArray(hourCycles("en-GB"), ["h23", "h12"]);
// Simple tests using "de".
assertEqArray(hourCycles("de"), ["h23", "h12"]);
assertEqArray(hourCycles("de-DE"), ["h23", "h12"]);
assertEqArray(hourCycles("de-ZZ"), ["h23"]);
// Locales without multiple additional allowed hour cycles.
assertEqArray(hourCycles("und-DK"), ["h23"]);
assertEqArray(hourCycles("da-DK"), ["h23"]);
// Locales with more than two additional allowed hour cycles.
assertEqArray(hourCycles("und-JP"), ["h23", "h11", "h12"]);
assertEqArray(hourCycles("ja-JP"), ["h23", "h11", "h12"]);
// Locales where preferred hour cycle doesn't match first allowed hour cycle.
assertEqArray(hourCycles("und-IR"), ["h23", "h12"]);
assertEqArray(hourCycles("fa-IR"), ["h23", "h12"]);
// Locales where language changes the preferred hour cycle.
assertEqArray(hourCycles("und-CA"), ["h12", "h23"]);
assertEqArray(hourCycles("en-CA"), ["h12", "h23"]);
assertEqArray(hourCycles("fr-CA"), ["h23", "h12"]);
// Region "001" has language overrides, too.
assertEqArray(hourCycles("und-001"), ["h23", "h12"]);
assertEqArray(hourCycles("en-001"), ["h12", "h23"]);
assertEqArray(hourCycles("ar-001"), ["h12", "h23"]);
const regions = [
"001", // UN M.49 code for the World.
// List of all regular regions in CLDR 48.
//
...validityData(`
AC~G AI AL~M AO AQ~U AW~X AZ
BA~B BD~J BL~O BQ~T BV~W BY~Z
CA CC~D CF~I CK~R CU~Z
DE DG DJ~K DM DO DZ
EA EC EE EG~H ER~T
FI~K FM FO FR
GA~B GD~I GL~N GP~U GW GY
HK HM~N HR HT~U
IC~E IL~O IQ~T
JE JM JO~P
KE KG~I KM~N KP KR KW KY~Z
LA~C LI LK LR~V LY
MA MC~H MK~Z
NA NC NE~G NI NL NO~P NR NU NZ
OM
PA PE~H PK~N PR~T PW PY
QA
RE RO RS RU RW
SA~E SG~O SR~T SV SX~Z
TA TC~D TF~H TJ~O TR TT TV~W TZ
UA UG UM US UY~Z
VA VC VE VG VI VN VU
WF WS
XK
YE YT
ZA ZM ZW
`),
"ZZ", // Identifier for the unknown region.
];
// Smoke test using some regions.
for (let region of regions) {
assertEq(hourCycles(`und-${region}`).length > 0, true);
}
if (typeof reportCompare === "function")
reportCompare(0, 0);