tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

legacy-and-sign-locales-with-unicode-extensions.js (2534B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 const languageTags = {
      4  // Case 1: legacy, regular tags.
      5  "art-lojban": "jbo",
      6  "cel-gaulish": "xtg",
      7  "zh-guoyu": "zh",
      8  "zh-hakka": "hak",
      9  "zh-xiang": "hsn",
     10 
     11  // Case 2: redundant language tags.
     12  "sgn-BR": "bzs",
     13  "sgn-CO": "csn",
     14  "sgn-DE": "gsg",
     15  "sgn-DK": "dsl",
     16  "sgn-ES": "ssp",
     17  "sgn-FR": "fsl",
     18  "sgn-GB": "bfi",
     19  "sgn-GR": "gss",
     20  "sgn-IE": "isg",
     21  "sgn-IT": "ise",
     22  "sgn-JP": "jsl",
     23  "sgn-MX": "mfs",
     24  "sgn-NI": "ncs",
     25  "sgn-NL": "dse",
     26  "sgn-NO": "nsi",
     27  "sgn-PT": "psr",
     28  "sgn-SE": "swl",
     29  "sgn-US": "ase",
     30  "sgn-ZA": "sfs",
     31 
     32  // Case 3: the special case.
     33  "ja-Latn-hepburn-heploc": "ja-Latn-alalc97",
     34 };
     35 const extensions = ["-u-attr", "-u-nu-latn"];
     36 const intlConstructors = [Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat];
     37 const options = [{localeMatcher: "best fit"}, {localeMatcher: "lookup"}];
     38 
     39 for (let [tag, canonical] of Object.entries(languageTags)) {
     40  // Ensure Intl.getCanonicalLocales canonicalizes the language tag correctly.
     41  assertEq(Intl.getCanonicalLocales(tag)[0], canonical);
     42 
     43  // Unicode extensions don't change the canonicalization result.
     44  for (let ext of extensions) {
     45    assertEq(Intl.getCanonicalLocales(tag + ext)[0], canonical + ext);
     46    assertEq(Intl.getCanonicalLocales(canonical + ext)[0], canonical + ext);
     47  }
     48 
     49  for (let intlCtor of intlConstructors) {
     50    for (let opt of options) {
     51      // The non-canonical tag is supported iff the canonical tag is supported.
     52      let supported = intlCtor.supportedLocalesOf(tag, opt);
     53      let supportedCanonical = intlCtor.supportedLocalesOf(canonical, opt);
     54      assertEq(supported.length, supportedCanonical.length);
     55 
     56      let isSupported = supported.length > 0;
     57      if (isSupported) {
     58        assertEq(supported[0], canonical);
     59        assertEq(supportedCanonical[0], canonical);
     60      }
     61 
     62      // Unicode extensions don't change the result of supportedLocalesOf().
     63      for (let ext of extensions) {
     64        let supportedExt = intlCtor.supportedLocalesOf(tag + ext, opt);
     65        let supportedCanonicalExt = intlCtor.supportedLocalesOf(canonical + ext, opt);
     66        assertEq(supportedExt.length, supportedCanonical.length);
     67        assertEq(supportedCanonicalExt.length, supportedCanonical.length);
     68 
     69        if (isSupported) {
     70          assertEq(supportedExt[0], canonical + ext);
     71          assertEq(supportedCanonicalExt[0], canonical + ext);
     72        }
     73      }
     74    }
     75  }
     76 }
     77 
     78 if (typeof reportCompare === "function")
     79  reportCompare(0, 0);