Commit | Line | Data |
6fba102d |
1 | BEGIN { |
2 | chdir 't' if -d 't'; |
3 | @INC = '../lib'; |
4 | } |
5 | |
6 | use MIME::Base64; |
7 | |
923761f9 |
8 | print "1..283\n"; |
6fba102d |
9 | |
10 | print "# Testing MIME::Base64-", $MIME::Base64::VERSION, "\n"; |
11 | |
7d85a32c |
12 | BEGIN { |
923761f9 |
13 | if (ord('A') == 41) { |
7d85a32c |
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 | |
24 | encodeTest(); |
25 | decodeTest(); |
26 | |
27 | # This used to generate a warning |
28 | print "not " unless decode_base64(encode_base64("foo")) eq "foo"; |
29 | print "ok ", $testno++, "\n"; |
30 | |
31 | sub 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 | |
349 | sub 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' => ''], |
923761f9 |
368 | ['x==' => ''], |
6fba102d |
369 | ['' => ''], |
370 | [undef() => ''], |
371 | ); |
372 | |
373 | for $test (@decode_tests) { |
374 | my($encoded, $expected) = ($$test[0], $$test[1]); |
375 | |
376 | my $decoded = decode_base64($encoded); |
377 | if ($decoded ne $expected) { |
378 | die "test $testno ($encoded): expected $expected, got $decoded\n"; |
379 | } |
380 | print "ok $testno\n"; |
381 | $testno++; |
382 | } |
383 | } |