summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Intl/supportedValuesOf-collation.js
blob: 626bb28c2051361f64dfe4e79accfc9f0cd2d520 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// |reftest| skip-if(!this.hasOwnProperty("Intl"))

const collations = Intl.supportedValuesOf("collation");

assertEq(new Set(collations).size, collations.length, "No duplicates are present");
assertEqArray(collations, [...collations].sort(), "The list is sorted");

const typeRE = /^[a-z0-9]{3,8}(-[a-z0-9]{3,8})*$/;
for (let collation of collations) {
  assertEq(typeRE.test(collation), true, `${collation} matches the 'type' production`);
}

for (let collation of collations) {
  assertEq(new Intl.Locale("und", {collation}).collation, collation, `${collation} is canonicalised`);
}

// Not all locales support all possible collations, so test the minimal set to
// cover all supported collations.
const locales = [
  "en", // "emoji", "eor"
  "ar", // compat
  "de", // phonebk
  "es", // trad
  "ko", // searchjl
  "ln", // phonetic
  "si", // dict
  "sv", // reformed
  "zh", // big5han, gb2312, pinyin, stroke, unihan, zhuyin
];

for (let collation of collations) {
  let supported = false;
  for (let locale of locales) {
    let obj = new Intl.Collator(locale, {collation});
    if (obj.resolvedOptions().collation === collation) {
      supported = true;
    }
  }

  assertEq(supported, true, `${collation} is supported by Collator`);
}

if (typeof reportCompare === "function")
  reportCompare(true, true);