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
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
12$testno = 1;
13
14encodeTest();
15decodeTest();
16
17# This used to generate a warning
18print "not " unless decode_base64(encode_base64("foo")) eq "foo";
19print "ok ", $testno++, "\n";
20
21sub 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
335sub 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}