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>