1BEGIN { 2 if ($ENV{'PERL_CORE'}){ 3 chdir 't' if -d 't'; 4 @INC = '../lib'; 5 } 6} 7 8use strict; 9use MIME::Base64; 10 11print "1..283\n"; 12 13print "# Testing MIME::Base64-", $MIME::Base64::VERSION, "\n"; 14 15BEGIN { 16 if (ord('A') == 0x41) { 17 *ASCII = sub { return $_[0] }; 18 } 19 else { 20 require Encode; 21 *ASCII = sub { Encode::encode('ascii',$_[0]) }; 22 } 23} 24 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; 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 = ( 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=="], 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 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) { 335 print "test $testno ($encoded): expected $plain, got $decoded\n"; 336 print "not "; 337 } 338 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 = ( 351 ['YWE=' => ASCII('aa')], 352 [' YWE=' => ASCII('aa')], 353 ['Y WE=' => ASCII('aa')], 354 ['YWE= ' => ASCII('aa')], 355 ["Y\nW\r\nE=" => ASCII('aa')], 356 357 # These will generate some warnings 358 ['YWE=====' => ASCII('aa')], # extra padding 359 ['YWE' => ASCII('aa')], # missing padding 360 ['YWFh====' => ASCII('aaa')], 361 ['YQ' => ASCII('a')], 362 ['Y' => ''], 363 ['x==' => ''], 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} 379