Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip-if(!this.hasOwnProperty("Intl"))
function testPunctuation(col, expectedIgnorePunctuation) {
let ignorePunctuation = col.resolvedOptions().ignorePunctuation;
assertEq(ignorePunctuation, expectedIgnorePunctuation);
// Punctuation is ignored iff |ignorePunctuation| is true.
assertEq(col.compare("", "*"), ignorePunctuation ? 0 : -1);
// Whitespace is also ignored when |ignorePunctuation| is true due to ICU limitations.
assertEq(col.compare("", " "), ignorePunctuation ? 0 : -1);
}
const locales = [
"en", "de", "fr", "it", "es", "ar", "zh", "ja",
// Thai, including some subtags.
"th", "th-Thai", "th-TH", "th-u-kf-false",
];
for (let locale of locales) {
// Thai ignores punctuation by default.
let isThai = new Intl.Locale(locale).language === "th";
// Using default "ignorePunctuation" option.
testPunctuation(new Intl.Collator(locale, {}), isThai);
// Using explicit "ignorePunctuation" option.
for (let ignorePunctuation of [true, false]) {
testPunctuation(new Intl.Collator(locale, {ignorePunctuation}), ignorePunctuation);
}
}
if (typeof getDefaultLocale === "undefined") {
var getDefaultLocale = SpecialPowers.Cu.getJSTestingFunctions().getDefaultLocale;
}
if (typeof setDefaultLocale === "undefined") {
var setDefaultLocale = SpecialPowers.Cu.getJSTestingFunctions().setDefaultLocale;
}
const defaultLocale = getDefaultLocale();
function withLocale(locale, fn) {
setDefaultLocale(locale);
try {
fn();
} finally {
setDefaultLocale(defaultLocale);
}
}
// Ensure this works correctly when Thai is the default locale.
for (let locale of ["th", "th-TH"]) {
withLocale(locale, () => {
testPunctuation(new Intl.Collator(undefined, {}), true);
});
}
if (typeof reportCompare === "function")
reportCompare(true, true);