BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
+ if ($ENV{PERL_CORE}) {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
}
-print "1..2\n";
+print "1..5\n";
use strict;
use Digest::MD5 qw(md5 md5_hex md5_base64);
-#
-# This is the output of: 'md5sum MD5.pm MD5.xs'
-#
-my $EXPECT;
+# To update the EBCDIC section even on a Latin 1 platform,
+# run this script with $ENV{EBCDIC_MD5SUM} set to a true value.
+# (You'll need to have Perl 5.7.3 or later, to have the Encode installed.)
+# (And remember that under the Perl core distribution you should
+# also have the $ENV{PERL_CORE} set to a true value.)
+# Similarly, to update MacOS section, run with $ENV{MAC_MD5SUM} set.
-if (ord('A') == 193) { # EBCDIC
-$EXPECT = <<EOT;
-???????????????????????????????? ext/Digest/MD5/MD5.pm
-???????????????????????????????? ext/Digest/MD5/MD5.xs
+my $EXPECT;
+if (ord "A" == 193) { # EBCDIC
+ $EXPECT = <<EOT;
+fcc48d6bb88ca8065bf9ddfcb9e7483e Changes
+0565ec21b15c0f23f4c51fb327c8926d README
+1965beb0e48253b694220fbb5d6230f5 MD5.pm
+5b3c24da3f70f3c0938cc7c205a28ab7 MD5.xs
+276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txt
EOT
-} else { # ASCII
-$EXPECT = <<EOT;
-665ddc08b12d6b1bf85ac6dc5aae68b3 ext/Digest/MD5/MD5.pm
-95444a9c6ad17e443e4606c6c7fd9e28 ext/Digest/MD5/MD5.xs
+} elsif ("\n" eq "\015") { # MacOS
+ $EXPECT = <<EOT;
+f161f474603c54a0093ad2f6f93be33b Changes
+6c950a0211a5a28f023bb482037698cd README
+18178c90bc13d6824f6c96973b6e9433 MD5.pm
+2c7fdb2ffa3840dc4f8dcdcf13241015 MD5.xs
+754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
EOT
+} else {
+ # This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
+ $EXPECT = <<EOT;
+029fa5059ba0b2175cee09ab5d9b7b73 Changes
+6c950a0211a5a28f023bb482037698cd README
+18178c90bc13d6824f6c96973b6e9433 MD5.pm
+2c7fdb2ffa3840dc4f8dcdcf13241015 MD5.xs
+754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
+EOT
+}
+
+if (!(-f "README") && -f "../README") {
+ chdir("..") or die "Can't chdir: $!";
}
+my $testno = 0;
+
my $B64 = 1;
eval { require MIME::Base64; };
if ($@) {
- print $@;
- print "# Will not test base64 methods\n";
+ print "# $@: Will not test base64 methods\n";
$B64 = 0;
}
-my $testno = 0;
-
-use File::Spec;
-
for (split /^/, $EXPECT) {
my($md5hex, $file) = split ' ';
- my @path = split(m:/:, $file);
- my $last = pop @path;
- my $path = File::Spec->updir;
- while (@path) {
- $path = File::Spec->catdir($path, shift @path);
+ my $base = $file;
+# print "# $base\n";
+ if ($ENV{PERL_CORE}) {
+ if ($file eq 'rfc1321.txt') { # Don't have it in core.
+ print "ok ", ++$testno, " # Skip: PERL_CORE\n";
+ next;
+ }
+ use File::Spec;
+ my @path = qw(ext Digest MD5);
+ my $path = File::Spec->updir;
+ while (@path) {
+ $path = File::Spec->catdir($path, shift @path);
+ }
+ $file = File::Spec->catfile($path, $file);
+ }
+# print "# file = $file\n";
+ unless (-f $file) {
+ warn "No such file: $file\n";
+ next;
+ }
+ if ($ENV{EBCDIC_MD5SUM}) {
+ require Encode;
+ my $data = cat_file($file);
+ Encode::from_to($data, 'latin1', 'cp1047');
+ print md5_hex($data), " $base\n";
+ next;
+ }
+ if ($ENV{MAC_MD5SUM}) {
+ require Encode;
+ my $data = cat_file($file);
+ Encode::from_to($data, 'latin1', 'MacRoman');
+ print md5_hex($data), " $base\n";
+ next;
}
- $file = File::Spec->catfile($path, $last);
my $md5bin = pack("H*", $md5hex);
my $md5b64;
if ($B64) {
chop($md5b64); chop($md5b64); # remove padding
}
my $failed;
+ my $got;
if (digest_file($file, 'digest') ne $md5bin) {
print "$file: Bad digest\n";
$failed++;
}
- if (digest_file($file, 'hexdigest') ne $md5hex) {
- print "$file: Bad hexdigest\n";
+ if (($got = digest_file($file, 'hexdigest')) ne $md5hex) {
+ print "$file: Bad hexdigest: got $got expected $md5hex\n";
$failed++;
}
#print "$file $method\n";
open(FILE, $file) or die "Can't open $file: $!";
-# Digests above are generated on UNIX without CRLF
-# so leave handles in text mode
-# binmode(FILE);
my $digest = Digest::MD5->new->addfile(*FILE)->$method();
close(FILE);
my($file) = @_;
local $/; # slurp
open(FILE, $file) or die "Can't open $file: $!";
-# Digests above are generated on UNIX without CRLF
-# so leave handles in text mode
-# binmode(FILE);
+
+ # For PerlIO in case of UTF-8 locales.
+ eval 'binmode(FILE, ":bytes")' if $] >= 5.008;
+
my $tmp = <FILE>;
close(FILE);
$tmp;