tor-browser

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

duplicate-variants.js (2133B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 // RFC 5646 section 2.1
      4 // variant       = 5*8alphanum         ; registered variants
      5 //               / (DIGIT 3alphanum)
      6 
      7 // Duplicate variants are forbidden.
      8 assertEqArray(Intl.getCanonicalLocales("de-1996"), ["de-1996"]);
      9 assertThrowsInstanceOf(() => Intl.getCanonicalLocales("de-1996-1996"), RangeError);
     10 
     11 // Multiple different variants are allowed.
     12 assertEqArray(Intl.getCanonicalLocales("sl-rozaj-solba"), ["sl-rozaj-solba"]);
     13 
     14 // Variants can have the same prefix.
     15 assertEqArray(Intl.getCanonicalLocales("zh-Latn-pinyin-pinyin2"), ["zh-Latn-pinyin-pinyin2"]);
     16 
     17 // Values in extension sequences are not counted as variants.
     18 assertEqArray(Intl.getCanonicalLocales("en-u-kf-false-kn-false"), ["en-u-kf-false-kn-false"]);
     19 
     20 // Also test duplicates in Unicode extension keywords and attributes.
     21 // From https://tools.ietf.org/html/rfc6067#section-2.1
     22 //
     23 //    An 'attribute' is a subtag with a length of three to eight
     24 //    characters following the singleton and preceding any 'keyword'
     25 //    sequences.  No attributes were defined at the time of this
     26 //    document's publication.
     27 //
     28 //    A 'keyword' is a sequence of subtags consisting of a 'key' subtag,
     29 //    followed by zero or more 'type' subtags (so a 'key' might appear
     30 //    alone and not be accompanied by a 'type' subtag).  A 'key' MUST
     31 //    NOT appear more than once in a language tag's extension string.
     32 //
     33 //    ...
     34 //
     35 //    Only the first occurrence of an attribute or key conveys meaning in a
     36 //    language tag.  When interpreting tags containing the Unicode locale
     37 //    extension, duplicate attributes or keywords are ignored in the
     38 //    following way: ignore any attribute that has already appeared in the
     39 //    tag and ignore any keyword whose key has already occurred in the tag.
     40 //
     41 // The duplicates itself are removed in CanonicalizeUnicodeLocaleId, step 2-3.
     42 assertEqArray(Intl.getCanonicalLocales("en-u-kn-false-kn-false"), ["en-u-kn-false"]);
     43 assertEqArray(Intl.getCanonicalLocales("en-u-attr1-attr2-attr2"), ["en-u-attr1-attr2"]);
     44 
     45 if (typeof reportCompare === "function")
     46    reportCompare(0, 0);