readd mimeqp.t as xtext (used to be binary because of the literal 8-bit
[p5sagit/p5-mst-13.2.git] / t / lib / mimeb64.t
1 BEGIN {
2         chdir 't' if -d 't';
3         @INC = '../lib';
4 }
5
6 use MIME::Base64;
7
8 print "1..282\n";
9
10 print "# Testing MIME::Base64-", $MIME::Base64::VERSION, "\n";
11
12 $testno = 1;
13
14 encodeTest();
15 decodeTest();
16
17 # This used to generate a warning
18 print "not " unless decode_base64(encode_base64("foo")) eq "foo";
19 print "ok ", $testno++, "\n";
20
21 sub encodeTest
22 {
23     print "# encode test\n";
24
25     my @encode_tests = (
26         [''    => ''],
27         ['a'   => 'YQ=='],
28         ['aa'  => 'YWE='],
29         ['aaa' => 'YWFh'],
30
31         ['aaa' => 'YWFh'],
32         ['aaa' => 'YWFh'],
33         ['aaa' => 'YWFh'],
34
35         ["\000\377" => "AP8="],
36         ["\377\000" => "/wA="],
37         ["\000\000\000" => "AAAA"],
38
39         # from HTTP spec
40         ['Aladdin:open sesame' => 'QWxhZGRpbjpvcGVuIHNlc2FtZQ=='],
41
42         ['a' x 100 => 'YWFh' x 33 . 'YQ=='],
43
44         ['Multipurpose Internet Mail Extensions: The Base64 Content-Transfer-Encoding is designed to represent sequences of octets in a form that is not humanly readable. '
45         => "TXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9uczogVGhlIEJhc2U2NCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGlzIGRlc2lnbmVkIHRvIHJlcHJlc2VudCBzZXF1ZW5jZXMgb2Ygb2N0ZXRzIGluIGEgZm9ybSB0aGF0IGlzIG5vdCBodW1hbmx5IHJlYWRhYmxlLiA="],
46
47         # All values
48         ["\000" => "AA=="],
49         ["\001" => "AQ=="],
50         ["\002" => "Ag=="],
51         ["\003" => "Aw=="],
52         ["\004" => "BA=="],
53         ["\005" => "BQ=="],
54         ["\006" => "Bg=="],
55         ["\007" => "Bw=="],
56         ["\010" => "CA=="],
57         ["\011" => "CQ=="],
58         ["\012" => "Cg=="],
59         ["\013" => "Cw=="],
60         ["\014" => "DA=="],
61         ["\015" => "DQ=="],
62         ["\016" => "Dg=="],
63         ["\017" => "Dw=="],
64         ["\020" => "EA=="],
65         ["\021" => "EQ=="],
66         ["\022" => "Eg=="],
67         ["\023" => "Ew=="],
68         ["\024" => "FA=="],
69         ["\025" => "FQ=="],
70         ["\026" => "Fg=="],
71         ["\027" => "Fw=="],
72         ["\030" => "GA=="],
73         ["\031" => "GQ=="],
74         ["\032" => "Gg=="],
75         ["\033" => "Gw=="],
76         ["\034" => "HA=="],
77         ["\035" => "HQ=="],
78         ["\036" => "Hg=="],
79         ["\037" => "Hw=="],
80         ["\040" => "IA=="],
81         ["\041" => "IQ=="],
82         ["\042" => "Ig=="],
83         ["\043" => "Iw=="],
84         ["\044" => "JA=="],
85         ["\045" => "JQ=="],
86         ["\046" => "Jg=="],
87         ["\047" => "Jw=="],
88         ["\050" => "KA=="],
89         ["\051" => "KQ=="],
90         ["\052" => "Kg=="],
91         ["\053" => "Kw=="],
92         ["\054" => "LA=="],
93         ["\055" => "LQ=="],
94         ["\056" => "Lg=="],
95         ["\057" => "Lw=="],
96         ["\060" => "MA=="],
97         ["\061" => "MQ=="],
98         ["\062" => "Mg=="],
99         ["\063" => "Mw=="],
100         ["\064" => "NA=="],
101         ["\065" => "NQ=="],
102         ["\066" => "Ng=="],
103         ["\067" => "Nw=="],
104         ["\070" => "OA=="],
105         ["\071" => "OQ=="],
106         ["\072" => "Og=="],
107         ["\073" => "Ow=="],
108         ["\074" => "PA=="],
109         ["\075" => "PQ=="],
110         ["\076" => "Pg=="],
111         ["\077" => "Pw=="],
112         ["\100" => "QA=="],
113         ["\101" => "QQ=="],
114         ["\102" => "Qg=="],
115         ["\103" => "Qw=="],
116         ["\104" => "RA=="],
117         ["\105" => "RQ=="],
118         ["\106" => "Rg=="],
119         ["\107" => "Rw=="],
120         ["\110" => "SA=="],
121         ["\111" => "SQ=="],
122         ["\112" => "Sg=="],
123         ["\113" => "Sw=="],
124         ["\114" => "TA=="],
125         ["\115" => "TQ=="],
126         ["\116" => "Tg=="],
127         ["\117" => "Tw=="],
128         ["\120" => "UA=="],
129         ["\121" => "UQ=="],
130         ["\122" => "Ug=="],
131         ["\123" => "Uw=="],
132         ["\124" => "VA=="],
133         ["\125" => "VQ=="],
134         ["\126" => "Vg=="],
135         ["\127" => "Vw=="],
136         ["\130" => "WA=="],
137         ["\131" => "WQ=="],
138         ["\132" => "Wg=="],
139         ["\133" => "Ww=="],
140         ["\134" => "XA=="],
141         ["\135" => "XQ=="],
142         ["\136" => "Xg=="],
143         ["\137" => "Xw=="],
144         ["\140" => "YA=="],
145         ["\141" => "YQ=="],
146         ["\142" => "Yg=="],
147         ["\143" => "Yw=="],
148         ["\144" => "ZA=="],
149         ["\145" => "ZQ=="],
150         ["\146" => "Zg=="],
151         ["\147" => "Zw=="],
152         ["\150" => "aA=="],
153         ["\151" => "aQ=="],
154         ["\152" => "ag=="],
155         ["\153" => "aw=="],
156         ["\154" => "bA=="],
157         ["\155" => "bQ=="],
158         ["\156" => "bg=="],
159         ["\157" => "bw=="],
160         ["\160" => "cA=="],
161         ["\161" => "cQ=="],
162         ["\162" => "cg=="],
163         ["\163" => "cw=="],
164         ["\164" => "dA=="],
165         ["\165" => "dQ=="],
166         ["\166" => "dg=="],
167         ["\167" => "dw=="],
168         ["\170" => "eA=="],
169         ["\171" => "eQ=="],
170         ["\172" => "eg=="],
171         ["\173" => "ew=="],
172         ["\174" => "fA=="],
173         ["\175" => "fQ=="],
174         ["\176" => "fg=="],
175         ["\177" => "fw=="],
176         ["\200" => "gA=="],
177         ["\201" => "gQ=="],
178         ["\202" => "gg=="],
179         ["\203" => "gw=="],
180         ["\204" => "hA=="],
181         ["\205" => "hQ=="],
182         ["\206" => "hg=="],
183         ["\207" => "hw=="],
184         ["\210" => "iA=="],
185         ["\211" => "iQ=="],
186         ["\212" => "ig=="],
187         ["\213" => "iw=="],
188         ["\214" => "jA=="],
189         ["\215" => "jQ=="],
190         ["\216" => "jg=="],
191         ["\217" => "jw=="],
192         ["\220" => "kA=="],
193         ["\221" => "kQ=="],
194         ["\222" => "kg=="],
195         ["\223" => "kw=="],
196         ["\224" => "lA=="],
197         ["\225" => "lQ=="],
198         ["\226" => "lg=="],
199         ["\227" => "lw=="],
200         ["\230" => "mA=="],
201         ["\231" => "mQ=="],
202         ["\232" => "mg=="],
203         ["\233" => "mw=="],
204         ["\234" => "nA=="],
205         ["\235" => "nQ=="],
206         ["\236" => "ng=="],
207         ["\237" => "nw=="],
208         ["\240" => "oA=="],
209         ["\241" => "oQ=="],
210         ["\242" => "og=="],
211         ["\243" => "ow=="],
212         ["\244" => "pA=="],
213         ["\245" => "pQ=="],
214         ["\246" => "pg=="],
215         ["\247" => "pw=="],
216         ["\250" => "qA=="],
217         ["\251" => "qQ=="],
218         ["\252" => "qg=="],
219         ["\253" => "qw=="],
220         ["\254" => "rA=="],
221         ["\255" => "rQ=="],
222         ["\256" => "rg=="],
223         ["\257" => "rw=="],
224         ["\260" => "sA=="],
225         ["\261" => "sQ=="],
226         ["\262" => "sg=="],
227         ["\263" => "sw=="],
228         ["\264" => "tA=="],
229         ["\265" => "tQ=="],
230         ["\266" => "tg=="],
231         ["\267" => "tw=="],
232         ["\270" => "uA=="],
233         ["\271" => "uQ=="],
234         ["\272" => "ug=="],
235         ["\273" => "uw=="],
236         ["\274" => "vA=="],
237         ["\275" => "vQ=="],
238         ["\276" => "vg=="],
239         ["\277" => "vw=="],
240         ["\300" => "wA=="],
241         ["\301" => "wQ=="],
242         ["\302" => "wg=="],
243         ["\303" => "ww=="],
244         ["\304" => "xA=="],
245         ["\305" => "xQ=="],
246         ["\306" => "xg=="],
247         ["\307" => "xw=="],
248         ["\310" => "yA=="],
249         ["\311" => "yQ=="],
250         ["\312" => "yg=="],
251         ["\313" => "yw=="],
252         ["\314" => "zA=="],
253         ["\315" => "zQ=="],
254         ["\316" => "zg=="],
255         ["\317" => "zw=="],
256         ["\320" => "0A=="],
257         ["\321" => "0Q=="],
258         ["\322" => "0g=="],
259         ["\323" => "0w=="],
260         ["\324" => "1A=="],
261         ["\325" => "1Q=="],
262         ["\326" => "1g=="],
263         ["\327" => "1w=="],
264         ["\330" => "2A=="],
265         ["\331" => "2Q=="],
266         ["\332" => "2g=="],
267         ["\333" => "2w=="],
268         ["\334" => "3A=="],
269         ["\335" => "3Q=="],
270         ["\336" => "3g=="],
271         ["\337" => "3w=="],
272         ["\340" => "4A=="],
273         ["\341" => "4Q=="],
274         ["\342" => "4g=="],
275         ["\343" => "4w=="],
276         ["\344" => "5A=="],
277         ["\345" => "5Q=="],
278         ["\346" => "5g=="],
279         ["\347" => "5w=="],
280         ["\350" => "6A=="],
281         ["\351" => "6Q=="],
282         ["\352" => "6g=="],
283         ["\353" => "6w=="],
284         ["\354" => "7A=="],
285         ["\355" => "7Q=="],
286         ["\356" => "7g=="],
287         ["\357" => "7w=="],
288         ["\360" => "8A=="],
289         ["\361" => "8Q=="],
290         ["\362" => "8g=="],
291         ["\363" => "8w=="],
292         ["\364" => "9A=="],
293         ["\365" => "9Q=="],
294         ["\366" => "9g=="],
295         ["\367" => "9w=="],
296         ["\370" => "+A=="],
297         ["\371" => "+Q=="],
298         ["\372" => "+g=="],
299         ["\373" => "+w=="],
300         ["\374" => "/A=="],
301         ["\375" => "/Q=="],
302         ["\376" => "/g=="],
303         ["\377" => "/w=="],
304     );
305
306     for $test (@encode_tests) {
307         my($plain, $expected) = ($$test[0], $$test[1]);
308
309         my $encoded = encode_base64($plain, '');
310         if ($encoded ne $expected) {
311             print "test $testno ($plain): expected $expected, got $encoded\n";
312             print "not ";
313         }
314         my $decoded = decode_base64($encoded);
315         if ($decoded ne $plain) {
316             print "test $testno ($plain): expected $expected, got $encoded\n";
317             print "not ";
318         }
319
320         # Try the old C versions too
321         if ($encoded ne MIME::Base64::old_encode_base64($plain, '')) {
322             print "old_encode_base64 give different result.\n";
323             print "not ";
324         }
325         if ($plain ne MIME::Base64::old_decode_base64($encoded)) {
326             print "old_decode_base64 give different result.\n";
327             print "not ";
328         }
329                 
330         print "ok $testno\n";
331         $testno++;
332     }
333 }
334
335 sub decodeTest
336 {
337     print "# decode test\n";
338
339     local $SIG{__WARN__} = sub { print $_[0] };  # avoid warnings on stderr
340
341     my @decode_tests = (
342         ['YWE='   => 'aa'],
343         [' YWE='  => 'aa'],
344         ['Y WE='  => 'aa'],
345         ['YWE= '  => 'aa'],
346         ["Y\nW\r\nE=" => 'aa'],
347
348         # These will generate some warnings
349         ['YWE=====' => 'aa'],    # extra padding
350         ['YWE'      => 'aa'],    # missing padding
351         ['YWFh====' => 'aaa'],
352         ['YQ'       => 'a'],
353         ['Y'        => ''],
354         [''         => ''],
355         [undef()    => ''],
356     );
357
358     for $test (@decode_tests) {
359         my($encoded, $expected) = ($$test[0], $$test[1]);
360
361         my $decoded = decode_base64($encoded);
362         if ($decoded ne $expected) {
363             die "test $testno ($encoded): expected $expected, got $decoded\n";
364         }
365         print "ok $testno\n";
366         $testno++;
367     }
368 }