1N/A if ($ENV{'PERL_CORE'}){
1N/A chdir 't' if -d 't';
1N/Aprint "# Testing MIME::Base64-", $MIME::Base64::VERSION, "\n";
1N/A if (ord('A') == 0x41) {
1N/A *ASCII = sub { return $_[0] };
1N/A *ASCII = sub { Encode::encode('ascii',$_[0]) };
1N/A# instead of "for my $test (...)" , which is my preference.
1N/A# Not sure which perl version has started supporting. MIME::Base64
1N/A# was supposed to work with very old perl5, right?
1N/A# This used to generate a warning
1N/Aprint "not " unless decode_base64(encode_base64("foo")) eq "foo";
1N/Aprint "ok ", $testno++, "\n";
1N/A print "# encode test\n";
1N/A my @encode_tests = (
1N/A ["\000\377" => "AP8="],
1N/A ["\377\000" => "/wA="],
1N/A ["\000\000\000" => "AAAA"],
1N/A [ASCII('a') => 'YQ=='],
1N/A [ASCII('aa') => 'YWE='],
1N/A [ASCII('aaa') => 'YWFh'],
1N/A [ASCII('aaa') => 'YWFh'],
1N/A [ASCII('aaa') => 'YWFh'],
1N/A [ASCII('aaa') => 'YWFh'],
1N/A [ASCII('Aladdin:open sesame') => 'QWxhZGRpbjpvcGVuIHNlc2FtZQ=='],
1N/A [ASCII('a') x 100 => 'YWFh' x 33 . 'YQ=='],
1N/A [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. ')
1N/A => "TXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9uczogVGhlIEJhc2U2NCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGlzIGRlc2lnbmVkIHRvIHJlcHJlc2VudCBzZXF1ZW5jZXMgb2Ygb2N0ZXRzIGluIGEgZm9ybSB0aGF0IGlzIG5vdCBodW1hbmx5IHJlYWRhYmxlLiA="],
1N/A for $test (@encode_tests) {
1N/A my($plain, $expected) = ($$test[0], $$test[1]);
1N/A my $encoded = encode_base64($plain, '');
1N/A if ($encoded ne $expected) {
1N/A print "test $testno ($plain): expected $expected, got $encoded\n";
1N/A my $decoded = decode_base64($encoded);
1N/A if ($decoded ne $plain) {
1N/A print "test $testno ($encoded): expected $plain, got $decoded\n";
1N/A print "ok $testno\n";
1N/A print "# decode test\n";
1N/A local $SIG{__WARN__} = sub { print $_[0] }; # avoid warnings on stderr
1N/A my @decode_tests = (
1N/A ['YWE=' => ASCII('aa')],
1N/A [' YWE=' => ASCII('aa')],
1N/A ['Y WE=' => ASCII('aa')],
1N/A ['YWE= ' => ASCII('aa')],
1N/A ["Y\nW\r\nE=" => ASCII('aa')],
1N/A # These will generate some warnings
1N/A ['YWE=====' => ASCII('aa')], # extra padding
1N/A ['YWE' => ASCII('aa')], # missing padding
1N/A ['YWFh====' => ASCII('aaa')],
1N/A ['YQ' => ASCII('a')],
1N/A for $test (@decode_tests) {
1N/A my($encoded, $expected) = ($$test[0], $$test[1]);
1N/A my $decoded = decode_base64($encoded);
1N/A if ($decoded ne $expected) {
1N/A die "test $testno ($encoded): expected $expected, got $decoded\n";
1N/A print "ok $testno\n";