e2d833e78333f8ca92554acc1fd07f3d80347fbd
[WebKit-https.git] / LayoutTests / fast / encoding / char-decoding.html
1 <html>
2 <head>
3 <script src="../js/resources/js-test-pre.js"></script>
4 <script src="resources/char-decoding-utils.js"></script>
5 </head>
6 <body>
7 <script>
8
9 description("This tests decoding characters in various character sets.");
10
11 testDecode('UTF-8', '%E2%88%9A', 'U+221A');
12
13 // <http://bugs.webkit.org/show_bug.cgi?id=17014> EUC-CN code A3A0 is mapped to U+E5E5 instead of U+3000
14 testDecode('gb2312', '%A3%A0', 'U+3000');
15 testDecode('gb_2312-80', '%A3%A0', 'U+3000');
16 testDecode('chinese', '%A3%A0', 'U+3000');
17 testDecode('gbk', '%A3%A0', 'U+3000');
18 testDecode('gb18030', '%A3%A0', 'U+3000');
19 testDecode('EUC-CN', '%A3%A0', 'U+3000');
20
21 // Test Shift_JIS aliases.
22 testDecode('Shift_JIS', '%82%d0', 'U+3072');
23 testDecode('shift-jis', '%82%d0', 'U+3072');
24
25 // Test that all Korean encodings of EUC-KR family are treated as windows-949.
26 var korean = {
27     encodings: ['korean', 'EUC-KR', 'windows-949', 'x-windows-949', 'x-uhc',
28                 'iso-ir-149', 'KS_C_5601-1987', 'KS_C_5601-1989',
29                 'KSC5601', 'KSC_5601'],
30     encoded: ['%A2%E6', '%A1%A4', '%A1%A9', '%A1%AA', '%A1%AD', '%A2%A6',
31               '%A2%C1', '%1A',    '%1C',    '%8F%A1', '%B4%D3', '%A2%41'],
32     unicode: ['U+20AC', 'U+00B7', 'U+00AD', 'U+2015', 'U+223C', 'U+FF5E', 
33               'U+2299', 'U+001A', 'U+001C', 'U+B8EA', 'U+B2D2', 'U+C910'] 
34 };
35
36 batchTestDecode(korean);
37    
38 // Test that ISO-8859-9 (Turkish) is upgraded to windows-1254 with Euro symbol.
39 var turkish = {
40   encodings: ['iso-8859-9', 'latin5', 'windows-1254'],
41   encoded: ['%80', '%9F', '%FD'],
42   unicode: ['U+20AC', 'U+0178', 'U+0131']
43 };
44
45 batchTestDecode(turkish);
46
47 // FIXME: Have to add tests for Euro and a few new characters added to ISO-8859-x 
48 // that are NOT subsets of the corresponding Windows codepages. For instance,
49 // ISO-8859-7:2003 has Euro at 0xA4 and a couple of other new characters.
50 // ICU 3.8.x or later has them. Perhaps, we need to have a separate test that
51 // can be enabled only with modern ICU.
52
53 // Baltic encodings fine points.
54 testDecode('ISO-8859-13', '%A1', 'U+201D');
55 testDecode('ISO-8859-13', '%A5', 'U+201E');
56 testDecode('ISO-8859-13', '%B4', 'U+201C');
57 testDecode('ISO-8859-13', '%FF', 'U+2019');
58 testDecode('windows-1257', '%80', 'U+20AC');
59 testDecode('windows-1257', '%B4', 'U+00B4');
60 testDecode('windows-1257', '%FF', 'U+02D9');
61
62 // Greek encodings fine points.
63 testDecode('iso-8859-7', '%A1', 'U+2018');
64 testDecode('iso-8859-7', '%B5', 'U+0385');
65 testDecode('iso-8859-7', '%B6', 'U+0386');
66 testDecode('windows-1253', '%80', 'U+20AC');
67 testDecode('windows-1253', '%A1', 'U+0385');
68 testDecode('windows-1253', '%B5', 'U+00B5');
69 testDecode('windows-1253', '%B6', 'U+00B6');
70
71 // KOI-8 variants
72 testDecode('KOI8-R', '%A4', 'U+2553');
73 testDecode('KOI8-R', '%AD', 'U+255C');
74 testDecode('KOI8-U', '%A4', 'U+0454');
75 testDecode('KOI8-U', '%AD', 'U+0491');
76
77 // Test that TIS-620 and ISO-8859-11 (Thai) are upgraded to windows-874.
78 // "0xDB => U+F8C1" is a weird PUA mapping that doesn't seem to be of
79 // any use, even on Windows.
80 var thai = {
81   encodings: ['TIS-620', 'ISO-8859-11', 'windows-874', 'dos-874'],
82   encoded: ['%80', '%96', '%A0', '%A1', '%DB'],
83   unicode: ['U+20AC', 'U+2013', 'U+00A0', 'U+0E01', 'U+F8C1']
84 };
85
86 batchTestDecode(thai);
87
88 // UTF-7 is expressly forbidden, so decoding it should not work correctly.
89 // This attempts to decode '<' as UTF-7 (+AD4) but it ends up being decoded
90 // as a '+AD4'.
91 testDecode('UTF-7', '+AD4', 'U+002B/U+0041/U+0044/U+0034');
92 testDecode('utf-7', '+AD4', 'U+002B/U+0041/U+0044/U+0034');
93
94 // UTF-16LE and variants.
95 testDecode('UTF-16LE', '%69%D8%D6%DE', 'U+D869/U+DED6');
96 testDecode('unicodeFEFF', '%69%D8%D6%DE', 'U+D869/U+DED6');
97 // According to HTML5 and for IE compatibility, UTF-16 is treated as little endian. The following tests fail as of Firefox 3.6.13.
98 testDecode('UTF-16', '%69%D8%D6%DE', 'U+D869/U+DED6');
99 testDecode('ISO-10646-UCS-2', '%69%D8%D6%DE', 'U+D869/U+DED6');
100 testDecode('UCS-2', '%69%D8%D6%DE', 'U+D869/U+DED6');
101 testDecode('Unicode', '%69%D8%D6%DE', 'U+D869/U+DED6');
102 testDecode('csUnicode', '%69%D8%D6%DE', 'U+D869/U+DED6');
103
104 // UTF-16BE and variants.
105 testDecode('UTF-16BE', '%D8%69%DE%D6', 'U+D869/U+DED6');
106 testDecode('unicodeFFFE', '%D8%69%DE%D6', 'U+D869/U+DED6');
107
108 </script>
109 <script src="../js/resources/js-test-post.js"></script>
110 </body>
111 </html>