Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / netwerk / test / unit / test_idn_blacklist.js
blobd7ff46af2b4312112944008032f5eab3a4a8cf14
1 // Test that URLs containing characters in the IDN blacklist are
2 // always displayed as punycode
4 "use strict";
6 const testcases = [
7 // Original Punycode or
8 // normalized form
9 //
10 ["\u00BC", "xn--14-c6t"],
11 ["\u00BD", "xn--12-c6t"],
12 ["\u00BE", "xn--34-c6t"],
13 ["\u01C3", "xn--ija"],
14 ["\u02D0", "xn--6qa"],
15 ["\u0337", "xn--4ta"],
16 ["\u0338", "xn--5ta"],
17 ["\u0589", "xn--3bb"],
18 ["\u05C3", "xn--rdb"],
19 ["\u05F4", "xn--5eb"],
20 ["\u0609", "xn--rfb"],
21 ["\u060A", "xn--sfb"],
22 ["\u066A", "xn--jib"],
23 ["\u06D4", "xn--klb"],
24 ["\u0701", "xn--umb"],
25 ["\u0702", "xn--vmb"],
26 ["\u0703", "xn--wmb"],
27 ["\u0704", "xn--xmb"],
28 ["\u115F", "xn--osd"],
29 ["\u1160", "xn--psd"],
30 ["\u1735", "xn--d0e"],
31 ["\u2027", "xn--svg"],
32 ["\u2028", "xn--tvg"],
33 ["\u2029", "xn--uvg"],
34 ["\u2039", "xn--bwg"],
35 ["\u203A", "xn--cwg"],
36 ["\u2041", "xn--jwg"],
37 ["\u2044", "xn--mwg"],
38 ["\u2052", "xn--0wg"],
39 ["\u2153", "xn--13-c6t"],
40 ["\u2154", "xn--23-c6t"],
41 ["\u2155", "xn--15-c6t"],
42 ["\u2156", "xn--25-c6t"],
43 ["\u2157", "xn--35-c6t"],
44 ["\u2158", "xn--45-c6t"],
45 ["\u2159", "xn--16-c6t"],
46 ["\u215A", "xn--56-c6t"],
47 ["\u215B", "xn--18-c6t"],
48 ["\u215C", "xn--38-c6t"],
49 ["\u215D", "xn--58-c6t"],
50 ["\u215E", "xn--78-c6t"],
51 ["\u215F", "xn--1-zjn"],
52 ["\u2215", "xn--w9g"],
53 ["\u2236", "xn--ubh"],
54 ["\u23AE", "xn--lmh"],
55 ["\u2571", "xn--hzh"],
56 ["\u29F6", "xn--jxi"],
57 ["\u29F8", "xn--lxi"],
58 ["\u2AFB", "xn--z4i"],
59 ["\u2AFD", "xn--14i"],
60 ["\u2FF0", "xn--85j"],
61 ["\u2FF1", "xn--95j"],
62 ["\u2FF2", "xn--b6j"],
63 ["\u2FF3", "xn--c6j"],
64 ["\u2FF4", "xn--d6j"],
65 ["\u2FF5", "xn--e6j"],
66 ["\u2FF6", "xn--f6j"],
67 ["\u2FF7", "xn--g6j"],
68 ["\u2FF8", "xn--h6j"],
69 ["\u2FF9", "xn--i6j"],
70 ["\u2FFA", "xn--j6j"],
71 ["\u2FFB", "xn--k6j"],
72 ["\u3014", "xn--96j"],
73 ["\u3015", "xn--b7j"],
74 ["\u3033", "xn--57j"],
75 ["\u3164", "xn--psd"],
76 ["\u321D", "xn--()-357j35d"],
77 ["\u321E", "xn--()-357jf36c"],
78 ["\u33AE", "xn--rads-id9a"],
79 ["\u33AF", "xn--rads2-4d6b"],
80 ["\u33C6", "xn--ckg-tc2a"],
81 ["\u33DF", "xn--am-6bv"],
82 ["\uA789", "xn--058a"],
83 ["\uFE3F", "xn--x6j"],
84 ["\uFE5D", "xn--96j"],
85 ["\uFE5E", "xn--b7j"],
86 ["\uFFA0", "xn--psd"],
87 ["\uFFF9", "xn--vn7c"],
88 ["\uFFFA", "xn--wn7c"],
89 ["\uFFFB", "xn--xn7c"],
90 ["\uFFFC", "xn--yn7c"],
91 ["\uFFFD", "xn--zn7c"],
93 // Characters from the IDN blacklist that normalize to ASCII
94 // If we start using STD3ASCIIRules these will be blocked (bug 316444)
95 ["\u00A0", " "],
96 ["\u2000", " "],
97 ["\u2001", " "],
98 ["\u2002", " "],
99 ["\u2003", " "],
100 ["\u2004", " "],
101 ["\u2005", " "],
102 ["\u2006", " "],
103 ["\u2007", " "],
104 ["\u2008", " "],
105 ["\u2009", " "],
106 ["\u200A", " "],
107 ["\u2024", "."],
108 ["\u202F", " "],
109 ["\u205F", " "],
110 ["\u3000", " "],
111 ["\u3002", "."],
112 ["\uFE14", ";"],
113 ["\uFE15", "!"],
114 ["\uFF0E", "."],
115 ["\uFF0F", "/"],
116 ["\uFF61", "."],
118 // Characters from the IDN blacklist that are stripped by Nameprep
119 ["\u200B", ""],
120 ["\uFEFF", ""],
123 function run_test() {
124 var idnService = Cc["@mozilla.org/network/idn-service;1"].getService(
125 Ci.nsIIDNService
127 for (var j = 0; j < testcases.length; ++j) {
128 var test = testcases[j];
129 var URL = test[0] + ".com";
130 var punycodeURL = test[1] + ".com";
131 var isASCII = {};
133 var result;
134 try {
135 result = idnService.convertToDisplayIDN(URL, isASCII);
136 } catch (e) {
137 continue;
139 if (punycodeURL.substr(0, 4) == "xn--") {
140 // test convertToDisplayIDN with a Unicode URL and with a
141 // Punycode URL if we have one
142 equal(escape(result), escape(punycodeURL));
144 result = idnService.convertToDisplayIDN(punycodeURL, isASCII);
145 equal(escape(result), escape(punycodeURL));
146 } else {
147 // The "punycode" URL isn't punycode. This happens in testcases
148 // where the Unicode URL has become normalized to an ASCII URL,
149 // so, even though expectedUnicode is true, the expected result
150 // is equal to punycodeURL
151 equal(escape(result), escape(punycodeURL));