comparison vendor/pear/net_idna2/tests/draft-josefsson-idn-test-vectors.php @ 0:1e000243b222

vanilla 1.3.3 distro, I hope
author Charlie Root
date Thu, 04 Jan 2018 15:50:29 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e000243b222
1 <?php
2 require_once 'Net/IDNA2.php';
3
4 // Test cases from https://www.gnu.org/software/libidn/draft-josefsson-idn-test-vectors.html
5
6 define('IDNA_ACE_PREFIX', 'xn--');
7
8 class IDNATest extends PHPUnit_Framework_TestCase {
9
10 public function setUp() {
11 $this->idn = new Net_IDNA2();
12 }
13
14 static function unichr($chr) {
15 return mb_convert_encoding('&#' . intval($chr) . ';', 'UTF-8', 'HTML-ENTITIES');
16 }
17
18 private function hexarray2string($arr) {
19 return implode('', array_map(array('self', 'unichr'), $arr));
20 }
21
22 public function testDecode1() {
23 // Arabic (Egyptian)
24 $expected = $this->hexarray2string(array(
25 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643,
26 0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A,
27 0x061F
28 ));
29 $result = $this->idn->decode(IDNA_ACE_PREFIX."egbpdaj6bu4bxfgehfvwxn");
30 $this->assertSame($expected, $result);
31 }
32
33 public function testDecode2() {
34 // Chinese (simplified)
35 $expected = $this->hexarray2string(array(
36 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587
37 ));
38 $result = $this->idn->decode(IDNA_ACE_PREFIX."ihqwcrb4cv8a8dqg056pqjye");
39 $this->assertSame($expected, $result);
40 }
41
42 public function testDecode3() {
43 // Chinese (traditional)
44 $expected = $this->hexarray2string(array(
45 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587
46 ));
47 $result = $this->idn->decode(IDNA_ACE_PREFIX."ihqwctvzc91f659drss3x8bo0yb");
48 $this->assertSame($expected, $result);
49 }
50
51 public function testDecode4() {
52 // Czech
53 $expected = $this->hexarray2string(array(
54 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073,
55 0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076,
56 0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079
57 ));
58 $result = $this->idn->decode(IDNA_ACE_PREFIX."Proprostnemluvesky-uyb24dma41a");
59 $this->assertSame($expected, $result);
60 }
61
62 public function testDecode5() {
63 // Hebrew
64 $expected = $this->hexarray2string(array(
65 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5,
66 0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9,
67 0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA
68 ));
69 $result = $this->idn->decode(IDNA_ACE_PREFIX."4dbcagdahymbxekheh6e0a7fei0b");
70 $this->assertSame($expected, $result);
71 }
72
73 public function testDecode6() {
74 // Hindi (Devanagari)
75 $expected = $this->hexarray2string(array(
76 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928,
77 0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902,
78 0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938,
79 0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902
80 ));
81 $result = $this->idn->decode(IDNA_ACE_PREFIX."i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd");
82 $this->assertSame($expected, $result);
83 }
84
85 public function testDecode7() {
86 // Japanese (kanji and hiragana)
87 $expected = $this->hexarray2string(array(
88 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E,
89 0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044,
90 0x306E, 0x304B
91 ));
92 $result = $this->idn->decode(IDNA_ACE_PREFIX."n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa");
93 $this->assertSame($expected, $result);
94 }
95
96 public function testDecode8() {
97 // Russian (Cyrillic)
98 $expected = $this->hexarray2string(array(
99 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435,
100 0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432,
101 0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443,
102 0x0441, 0x0441, 0x043A, 0x0438
103 ));
104 $result = $this->idn->decode(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l");
105 $this->assertSame($expected, $result);
106 }
107
108 public function testDecode9() {
109 // Spanish
110 $expected = $this->hexarray2string(array(
111 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F,
112 0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069,
113 0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074,
114 0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065,
115 0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F, 0x006C
116 ));
117 $result = $this->idn->decode(IDNA_ACE_PREFIX."PorqunopuedensimplementehablarenEspaol-fmd56a");
118 $this->assertSame($expected, $result);
119 }
120
121 public function testDecode10() {
122 // Vietnamese
123 $expected = $this->hexarray2string(array(
124 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD,
125 0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3,
126 0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069,
127 0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074
128 ));
129 $result = $this->idn->decode(IDNA_ACE_PREFIX."TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g");
130 $this->assertSame($expected, $result);
131 }
132
133 public function testDecode11() {
134 // Japanese
135 $expected = $this->hexarray2string(array(
136 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F
137 ));
138 $result = $this->idn->decode(IDNA_ACE_PREFIX."3B-ww4c5e180e575a65lsy2b");
139 $this->assertSame($expected, $result);
140 }
141
142 public function testDecode12() {
143 // Japanese
144 $expected = $this->hexarray2string(array(
145 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069,
146 0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052,
147 0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053
148 ));
149 $result = $this->idn->decode(IDNA_ACE_PREFIX."-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n");
150 $this->assertSame($expected, $result);
151 }
152
153 public function testDecode13() {
154 // Japanese
155 $expected = $this->hexarray2string(array(
156 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E,
157 0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061,
158 0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834,
159 0x6240
160 ));
161 $result = $this->idn->decode(IDNA_ACE_PREFIX."Hello-Another-Way--fc4qua05auwb3674vfr0b");
162 $this->assertSame($expected, $result);
163 }
164
165 public function testDecode14() {
166 // Japanese
167 $expected = $this->hexarray2string(array(
168 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032
169 ));
170 $result = $this->idn->decode(IDNA_ACE_PREFIX."2-u9tlzr9756bt3uc0v");
171 $this->assertSame($expected, $result);
172 }
173
174 public function testDecode15() {
175 // Japanese
176 $expected = $this->hexarray2string(array(
177 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069,
178 0x3059, 0x308B, 0x0035, 0x79D2, 0x524D
179 ));
180 $result = $this->idn->decode(IDNA_ACE_PREFIX."MajiKoi5-783gue6qz075azm5e");
181 $this->assertSame($expected, $result);
182 }
183
184 public function testDecode16() {
185 // Japanese
186 $expected = $this->hexarray2string(array(
187 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0
188 ));
189 $result = $this->idn->decode(IDNA_ACE_PREFIX."de-jg4avhby1noc0d");
190 $this->assertSame($expected, $result);
191 }
192
193 public function testDecode17() {
194 // Japanese
195 $expected = $this->hexarray2string(array(
196 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067
197 ));
198 $result = $this->idn->decode(IDNA_ACE_PREFIX."d9juau41awczczp");
199 $this->assertSame($expected, $result);
200 }
201
202 public function testDecode18() {
203 // Greek
204 $expected = $this->hexarray2string(array(
205 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac
206 ));
207 $result = $this->idn->decode(IDNA_ACE_PREFIX."hxargifdar");
208 $this->assertSame($expected, $result);
209 }
210
211 public function testDecode19() {
212 // Maltese (Malti)
213 $expected = $this->hexarray2string(array(
214 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
215 0x0127, 0x0061
216 ));
217 $result = $this->idn->decode(IDNA_ACE_PREFIX."bonusaa-5bb1da");
218 $this->assertSame($expected, $result);
219 }
220
221 public function testDecode20() {
222 // Russian (Cyrillic)
223 $expected = $this->hexarray2string(array(
224 0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435,
225 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432,
226 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443,
227 0x0441, 0x0441, 0x043a, 0x0438
228 ));
229 $result = $this->idn->decode(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l");
230 $this->assertSame($expected, $result);
231 }
232
233 public function testEncode1() {
234 // Arabic (Egyptian)
235 $idna = $this->hexarray2string(array(
236 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643,
237 0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A,
238 0x061F
239 ));
240 $result = $this->idn->encode($idna);
241 $this->assertSame(IDNA_ACE_PREFIX."egbpdaj6bu4bxfgehfvwxn", $result);
242 }
243
244 public function testEncode2() {
245 // Chinese (simplified)
246 $idna = $this->hexarray2string(array(
247 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587
248 ));
249 $result = $this->idn->encode($idna);
250 $this->assertSame(IDNA_ACE_PREFIX."ihqwcrb4cv8a8dqg056pqjye", $result);
251 }
252
253 public function testEncode3() {
254 // Chinese (traditional)
255 $idna = $this->hexarray2string(array(
256 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587
257 ));
258 $result = $this->idn->encode($idna);
259 $this->assertSame(IDNA_ACE_PREFIX."ihqwctvzc91f659drss3x8bo0yb", $result);
260 }
261
262 public function testEncode4() {
263 // Czech
264 $idna = $this->hexarray2string(array(
265 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073,
266 0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076,
267 0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079
268 ));
269 $result = $this->idn->encode($idna);
270 $this->assertSame(IDNA_ACE_PREFIX."proprostnemluvesky-uyb24dma41a", $result);
271 }
272
273 public function testEncode5() {
274 // Hebrew
275 $idna = $this->hexarray2string(array(
276 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5,
277 0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9,
278 0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA
279 ));
280 $result = $this->idn->encode($idna);
281 $this->assertSame(IDNA_ACE_PREFIX."4dbcagdahymbxekheh6e0a7fei0b", $result);
282 }
283
284 public function testEncode6() {
285 // Hindi (Devanagari)
286 $idna = $this->hexarray2string(array(
287 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928,
288 0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902,
289 0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938,
290 0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902
291 ));
292 $result = $this->idn->encode($idna);
293 $this->assertSame(IDNA_ACE_PREFIX."i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd", $result);
294 }
295
296 public function testEncode7() {
297 // Japanese (kanji and hiragana)
298 $idna = $this->hexarray2string(array(
299 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E,
300 0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044,
301 0x306E, 0x304B
302 ));
303 $result = $this->idn->encode($idna);
304 $this->assertSame(IDNA_ACE_PREFIX."n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa", $result);
305 }
306
307 public function testEncode8() {
308 // Russian (Cyrillic)
309 $idna = $this->hexarray2string(array(
310 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435,
311 0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432,
312 0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443,
313 0x0441, 0x0441, 0x043A, 0x0438
314 ));
315 $result = $this->idn->encode($idna);
316 $this->assertSame(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l", $result);
317 }
318
319 public function testEncode9() {
320 // Spanish
321 $idna = $this->hexarray2string(array(
322 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F,
323 0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069,
324 0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074,
325 0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065,
326 0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F, 0x006C
327 ));
328 $result = $this->idn->encode($idna);
329 $this->assertSame(IDNA_ACE_PREFIX."porqunopuedensimplementehablarenespaol-fmd56a", $result);
330 }
331
332 public function testEncode10() {
333 // Vietnamese
334 $idna = $this->hexarray2string(array(
335 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD,
336 0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3,
337 0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069,
338 0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074
339 ));
340 $result = $this->idn->encode($idna);
341 $this->assertSame(IDNA_ACE_PREFIX."tisaohkhngthchnitingvit-kjcr8268qyxafd2f1b9g", $result);
342 }
343
344 public function testEncode11() {
345 // Japanese
346 $idna = $this->hexarray2string(array(
347 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F
348 ));
349 $result = $this->idn->encode($idna);
350 $this->assertSame(IDNA_ACE_PREFIX."3b-ww4c5e180e575a65lsy2b", $result);
351 }
352
353 public function testEncode12() {
354 // Japanese
355 $idna = $this->hexarray2string(array(
356 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069,
357 0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052,
358 0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053
359 ));
360 $result = $this->idn->encode($idna);
361 $this->assertSame(IDNA_ACE_PREFIX."-with-super-monkeys-pc58ag80a8qai00g7n9n", $result);
362 }
363
364 public function testEncode13() {
365 // Japanese
366 $idna = $this->hexarray2string(array(
367 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E,
368 0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061,
369 0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834,
370 0x6240
371 ));
372 $result = $this->idn->encode($idna);
373 $this->assertSame(IDNA_ACE_PREFIX."hello-another-way--fc4qua05auwb3674vfr0b", $result);
374 }
375
376 public function testEncode14() {
377 // Japanese
378 $idna = $this->hexarray2string(array(
379 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032
380 ));
381 $result = $this->idn->encode($idna);
382 $this->assertSame(IDNA_ACE_PREFIX."2-u9tlzr9756bt3uc0v", $result);
383 }
384
385 public function testEncode15() {
386 // Japanese
387 $idna = $this->hexarray2string(array(
388 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069,
389 0x3059, 0x308B, 0x0035, 0x79D2, 0x524D
390 ));
391 $result = $this->idn->encode($idna);
392 $this->assertSame(IDNA_ACE_PREFIX."majikoi5-783gue6qz075azm5e", $result);
393 }
394
395 public function testEncode16() {
396 // Japanese
397 $idna = $this->hexarray2string(array(
398 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0
399 ));
400 $result = $this->idn->encode($idna);
401 $this->assertSame(IDNA_ACE_PREFIX."de-jg4avhby1noc0d", $result);
402 }
403
404 public function testEncode17() {
405 // Japanese
406 $idna = $this->hexarray2string(array(
407 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067
408 ));
409 $result = $this->idn->encode($idna);
410 $this->assertSame(IDNA_ACE_PREFIX."d9juau41awczczp", $result);
411 }
412
413 public function testEncode18() {
414 // Greek
415 $idna = $this->hexarray2string(array(
416 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac
417 ));
418 $result = $this->idn->encode($idna);
419 $this->assertSame(IDNA_ACE_PREFIX."hxargifdar", $result);
420 }
421
422 public function testEncode19() {
423 // Maltese (Malti)
424 $idna = $this->hexarray2string(array(
425 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
426 0x0127, 0x0061
427 ));
428 $result = $this->idn->encode($idna);
429 $this->assertSame(IDNA_ACE_PREFIX."bonusaa-5bb1da", $result);
430 }
431
432 public function testEncode20() {
433 // Russian (Cyrillic)
434 $idna = $this->hexarray2string(array(
435 0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435,
436 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432,
437 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443,
438 0x0441, 0x0441, 0x043a, 0x0438
439 ));
440 $result = $this->idn->encode($idna);
441 $this->assertSame(IDNA_ACE_PREFIX."b1abfaaepdrnnbgefbadotcwatmq2g4l", $result);
442 }
443
444 }
445