diff options
Diffstat (limited to 'js/src/tests/non262/Intl/Collator/ignorePunctuation.js')
-rw-r--r-- | js/src/tests/non262/Intl/Collator/ignorePunctuation.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/js/src/tests/non262/Intl/Collator/ignorePunctuation.js b/js/src/tests/non262/Intl/Collator/ignorePunctuation.js new file mode 100644 index 0000000000..281563cc5c --- /dev/null +++ b/js/src/tests/non262/Intl/Collator/ignorePunctuation.js @@ -0,0 +1,60 @@ +// |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); |