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