Commit | Line | Data |
6fba102d |
1 | BEGIN { |
23751703 |
2 | if ($ENV{'PERL_CORE'}){ |
a1847200 |
3 | chdir 't' if -d 't'; |
4 | @INC = '../lib'; |
23751703 |
5 | } |
6fba102d |
6 | } |
7 | |
23751703 |
8 | use strict; |
6fba102d |
9 | use MIME::Base64; |
10 | |
923761f9 |
11 | print "1..283\n"; |
6fba102d |
12 | |
13 | print "# Testing MIME::Base64-", $MIME::Base64::VERSION, "\n"; |
14 | |
7d85a32c |
15 | BEGIN { |
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 |
25 | my $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? |
29 | my $test; |
6fba102d |
30 | |
31 | encodeTest(); |
32 | decodeTest(); |
33 | |
34 | # This used to generate a warning |
35 | print "not " unless decode_base64(encode_base64("foo")) eq "foo"; |
36 | print "ok ", $testno++, "\n"; |
37 | |
38 | sub 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 | |
344 | sub 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 | } |