tor-browser

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

unicode-extension-sequences.js (3246B)


      1 // |reftest| skip-if(!this.getSelfHostedValue||!this.hasOwnProperty('Intl'))
      2 
      3 const startOfUnicodeExtensions = getSelfHostedValue("startOfUnicodeExtensions");
      4 const endOfUnicodeExtensions = getSelfHostedValue("endOfUnicodeExtensions");
      5 
      6 const testcases = [
      7    // Language tag without Unicode extension.
      8    { locale: "en", start: -1, end: 0 },
      9    { locale: "en-Latn", start: -1, end: 0 },
     10    { locale: "en-x-y", start: -1, end: 0 },
     11    { locale: "en-x-yz", start: -1, end: 0 },
     12    { locale: "en-x-u-kf", start: -1, end: 0 },
     13 
     14    // Unicode extension sequence starts with key subtag.
     15    // - no suceeding key or type subtags.
     16    { locale: "en-u-ab", start: 2, end: 7 },
     17    { locale: "en-u-ab-x-y", start: 2, end: 7 },
     18    { locale: "en-u-ab-x-yz", start: 2, end: 7 },
     19    { locale: "en-u-ab-x-u-kn", start: 2, end: 7 },
     20    // - followed by key subtag.
     21    { locale: "en-u-ab-cd", start: 2, end: 10 },
     22    { locale: "en-u-ab-cd-x-y", start: 2, end: 10 },
     23    { locale: "en-u-ab-cd-x-yz", start: 2, end: 10 },
     24    { locale: "en-u-ab-cd-x-u-kn", start: 2, end: 10 },
     25    // - followed by type subtag.
     26    { locale: "en-u-ab-cdef", start: 2, end: 12 },
     27    { locale: "en-u-ab-cdef-x-y", start: 2, end: 12 },
     28    { locale: "en-u-ab-cdef-x-yz", start: 2, end: 12 },
     29    { locale: "en-u-ab-cdef-x-y-u-kn", start: 2, end: 12 },
     30 
     31    // Unicode extension sequence starts with attribute subtag.
     32    // - no suceeding attribute or key subtags.
     33    { locale: "en-u-abc", start: 2, end: 8 },
     34    { locale: "en-u-abc-x-y", start: 2, end: 8 },
     35    { locale: "en-u-abc-x-yz", start: 2, end: 8 },
     36    { locale: "en-u-abc-x-y-u-kn", start: 2, end: 8 },
     37    // - followed by attribute subtag.
     38    { locale: "en-u-abc-def", start: 2, end: 12 },
     39    { locale: "en-u-abc-def-x-y", start: 2, end: 12 },
     40    { locale: "en-u-abc-def-x-yz", start: 2, end: 12 },
     41    { locale: "en-u-abc-def-x-y-u-kn", start: 2, end: 12 },
     42    // - followed by key subtag.
     43    { locale: "en-u-abc-de", start: 2, end: 11 },
     44    { locale: "en-u-abc-de-x-y", start: 2, end: 11 },
     45    { locale: "en-u-abc-de-x-yz", start: 2, end: 11 },
     46    { locale: "en-u-abc-de-x-y-u-kn", start: 2, end: 11 },
     47    // - followed by two key subtags.
     48    { locale: "en-u-abc-de-fg", start: 2, end: 14 },
     49    { locale: "en-u-abc-de-fg-x-y", start: 2, end: 14 },
     50    { locale: "en-u-abc-de-fg-x-yz", start: 2, end: 14 },
     51    { locale: "en-u-abc-de-fg-x-y-u-kn", start: 2, end: 14 },
     52    // - followed by key and type subtag.
     53    { locale: "en-u-abc-de-fgh", start: 2, end: 15 },
     54    { locale: "en-u-abc-de-fgh-x-y", start: 2, end: 15 },
     55    { locale: "en-u-abc-de-fgh-x-yz", start: 2, end: 15 },
     56    { locale: "en-u-abc-de-fgh-x-y-u-kn", start: 2, end: 15 },
     57 
     58    // Also test when the Unicode extension doesn't start at index 2.
     59    { locale: "en-Latn-u-kf", start: 7, end: 12 },
     60    { locale: "und-u-kf", start: 3, end: 8 },
     61 ];
     62 
     63 for (const {locale, start, end} of testcases) {
     64    // Ensure the input is a valid language tag.
     65    assertEqArray(Intl.getCanonicalLocales(locale), [locale]);
     66 
     67    assertEq(startOfUnicodeExtensions(locale), start);
     68 
     69    if (start >= 0)
     70        assertEq(endOfUnicodeExtensions(locale, start), end);
     71 }
     72 
     73 if (typeof reportCompare === "function")
     74    reportCompare(true, true);