tor-browser

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

test_ManifestProcessor_lang.html (4914B)


      1 <!DOCTYPE HTML>
      2 <meta charset="utf-8">
      3 <!--
      4 Bug 1143879 - Implement lang member of Web manifest
      5 https://bugzilla.mozilla.org/show_bug.cgi?id=1143879
      6 -->
      7 <meta charset="utf-8">
      8 <title>Test for Bug 1143879 - Implement lang member of Web manifest</title>
      9 <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 <script src="common.js"></script>
     12 <script>
     13 /**
     14 * lang member
     15 * https://w3c.github.io/manifest/#lang-member
     16 */
     17 /* globals is, typeTests, data, processor, seperators, lineTerminators, todo_is*/
     18 "use strict";
     19 // Type checks: checks that only strings are accepted.
     20 
     21 for (const type of typeTests) {
     22  const expected = `Expect non-string to be undefined.`;
     23  data.jsonText = JSON.stringify({
     24    lang: type,
     25  });
     26  const result = processor.process(data);
     27  is(result.lang, undefined, expected);
     28 }
     29 
     30 // Test valid language tags - derived from IANA and BCP-47 spec
     31 // and our Intl.js implementation.
     32 var validTags = [
     33  "aa", "ab", "ae", "af", "ak", "am", "an", "ar", "as", "av", "ay", "az",
     34  "ba", "be", "bg", "bi", "bm", "bn", "bo", "br", "bs", "ca", "ce",
     35  "ch", "co", "cr", "cs", "cu", "cv", "cy", "da", "de", "dv", "dz", "ee",
     36  "el", "en", "eo", "es", "et", "eu", "fa", "ff", "fi", "fj", "fo", "fr",
     37  "fy", "ga", "gd", "gl", "gn", "gu", "gv", "ha", "he", "hi", "ho", "hr",
     38  "ht", "hu", "hy", "hz", "ia", "id", "ie", "ig", "ik", "io",
     39  "is", "it", "iu", "ja", "jv", "ka", "kg", "ki", "kj",
     40  "kk", "kl", "km", "kn", "ko", "kr", "ks", "ku", "kv", "kw", "ky", "la",
     41  "lb", "lg", "li", "ln", "lo", "lt", "lu", "lv", "mg", "mh", "mi", "mk",
     42  "ml", "mn", "mr", "ms", "mt", "my", "na", "nb", "nd", "ne", "ng",
     43  "nl", "nn", "no", "nr", "nv", "ny", "oc", "oj", "om", "or", "os", "pa",
     44  "pi", "pl", "ps", "pt", "qu", "rm", "rn", "ro", "ru", "rw", "sa", "sc",
     45  "sd", "se", "sg", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr",
     46  "ss", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "ti", "tk",
     47  "tn", "to", "tr", "ts", "tt", "ty", "ug", "uk", "ur", "uz", "ve",
     48  "vi", "vo", "wa", "wo", "xh", "yi", "yo", "za", "zh", "zu", "en-US",
     49  "jp-JS", "pt-PT", "pt-BR", "de-CH", "de-DE-1901", "es-419", "sl-IT-nedis",
     50  "en-US-boont", "mn-Cyrl-MN", "sr-Cyrl", "sr-Latn",
     51  "zh-TW", "en-GB-boont-posix-r-extended-sequence-x-private",
     52  "yue-HK", "de-CH-x-phonebk", "az-Arab-x-aze-derbend",
     53  "qaa-Qaaa-QM-x-southern",
     54 ];
     55 
     56 
     57 for (var tag of validTags) {
     58  const expected = `Expect lang to be "${tag}"`;
     59  data.jsonText = JSON.stringify({
     60    lang: tag,
     61  });
     62  const result = processor.process(data);
     63  is(result.lang, tag, expected);
     64 }
     65 
     66 // Canonical form conversion... old names become new names.
     67 const granfatheredTags = [
     68  ["bh", "bho"],
     69  ["in", "id"],
     70  ["iw", "he"],
     71  ["ji", "yi"],
     72  ["jw", "jv"],
     73  ["mo", "ro"],
     74  ["sh", "sr-Latn"],
     75  ["tl", "fil"],
     76  ["tw", "ak"],
     77  ["nan-Hans-MM-variant2-variant1-t-zh-latn-u-ca-chinese-x-private",
     78   "nan-Hans-MM-variant1-variant2-t-zh-latn-u-ca-chinese-x-private"],
     79  ["cmn-Hans-CN", "zh-Hans-CN"],
     80 ];
     81 
     82 for (const [oldTag, newTag] of granfatheredTags) {
     83  const expected = `Expect lang to be "${newTag}"`;
     84  data.jsonText = JSON.stringify({
     85    lang: oldTag,
     86  });
     87  const result = processor.process(data);
     88  is(result.lang, newTag, expected);
     89 }
     90 
     91 // trim tests - check that language tags get trimmed properly.
     92 for (tag of validTags) {
     93  const expected = `Expect trimmed tag to be returned.`;
     94  let expandedtag = seperators + lineTerminators + tag;
     95  expandedtag += lineTerminators + seperators;
     96  data.jsonText = JSON.stringify({
     97    lang: expandedtag,
     98  });
     99  const result = processor.process(data);
    100  is(result.lang, tag, expected);
    101 }
    102 
    103 // Invalid language tags, derived from BCP-47 and made up.
    104 var invalidTags = [
    105 "de-419-DE", " a-DE ", "ar-a-aaa-b-bbb-a-ccc", "sdafsdfaadsfdsf", "i",
    106 "i-phone", "en US", "EN-*-US-JP", "JA-INVALID-TAG", "123123123",
    107 ];
    108 
    109 
    110 for (var item of invalidTags) {
    111  const expected = `Expect invalid tag (${item}) to be treated as undefined.`;
    112  data.jsonText = JSON.stringify({
    113    lang: item,
    114  });
    115  const result = processor.process(data);
    116  is(result.lang, undefined, expected);
    117 }
    118 
    119 // Canonical form conversion tests. We convert the following tags, which are in
    120 // canonical form, to upper case and expect the processor to return them
    121 // in canonical form.
    122 var canonicalTags = [
    123  "jp-JS", "pt-PT", "pt-BR", "de-CH", "de-DE-1901", "es-419", "sl-IT-nedis",
    124  "en-US-boont", "mn-Cyrl-MN", "sr-Cyrl", "sr-Latn",
    125  "hy-Latn-IT", "zh-TW", "en-GB-boont-r-extended-sequence-x-private",
    126  "yue-HK", "de-CH-x-phonebk", "az-Arab-x-aze-derbend",
    127  "qaa-Qaaa-QM-x-southern",
    128 ];
    129 
    130 for (tag of canonicalTags) {
    131  var uppedTag = tag.toUpperCase();
    132  const expected = `Expect tag (${uppedTag}) to be in canonical form (${tag}).`;
    133  data.jsonText = JSON.stringify({
    134    lang: uppedTag,
    135  });
    136  const result = processor.process(data);
    137  is(result.lang, tag, expected);
    138 }
    139 </script>