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