Upgrade to Digest::MD5 2.18. files.t doesn't
[p5sagit/p5-mst-13.2.git] / ext / Digest / MD5 / t / files.t
1 print "1..5\n";
2
3 use strict;
4 use Digest::MD5 qw(md5 md5_hex md5_base64);
5
6 #
7 # This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
8 #
9 my $EXPECT = <<EOT;
10 23cafa2de11474f0df8f808cc588bcc9  Changes
11 3519f3d02c7c91158f732f0f00064657  README
12 0268931475ae2a2e843ff58504cfa3f0  MD5.pm
13 1be293491bba726810f8e87671ee0328  MD5.xs
14 754b9db19f79dbc4992f7166eb0f37ce  rfc1321.txt
15 EOT
16
17 if (!(-f "README") && -f "../README") {
18    chdir("..") or die "Can't chdir: $!";
19 }
20
21 my $testno = 0;
22
23 my $B64 = 1;
24 eval { require MIME::Base64; };
25 if ($@) {
26     print $@;
27     print "Will not test base64 methods\n";
28     $B64 = 0;
29 }
30
31 for (split /^/, $EXPECT) {
32      my($md5hex, $file) = split ' ';
33      my $md5bin = pack("H*", $md5hex);
34      my $md5b64;
35      if ($B64) {
36          $md5b64 = MIME::Base64::encode($md5bin, "");
37          chop($md5b64); chop($md5b64);   # remove padding
38      }
39      my $failed;
40
41      if (digest_file($file, 'digest') ne $md5bin) {
42          print "$file: Bad digest\n";
43          $failed++;
44      }
45
46      if (digest_file($file, 'hexdigest') ne $md5hex) {
47          print "$file: Bad hexdigest\n";
48          $failed++;
49      }
50
51      if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
52          print "$file: Bad b64digest\n";
53          $failed++;
54      }
55
56      my $data = cat_file($file);
57      if (md5($data) ne $md5bin) {
58          print "$file: md5() failed\n";
59          $failed++;
60      }
61      if (md5_hex($data) ne $md5hex) {
62          print "$file: md5_hex() failed\n";
63          $failed++;
64      }
65      if ($B64 && md5_base64($data) ne $md5b64) {
66          print "$file: md5_base64() failed\n";
67          $failed++;
68      }
69
70      if (Digest::MD5->new->add($data)->digest ne $md5bin) {
71          print "$file: MD5->new->add(...)->digest failed\n";
72          $failed++;
73      }
74      if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
75          print "$file: MD5->new->add(...)->hexdigest failed\n";
76          $failed++;
77      }
78      if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
79          print "$file: MD5->new->add(...)->b64digest failed\n";
80          $failed++;
81      }
82
83      my @data = split //, $data;
84      if (md5(@data) ne $md5bin) {
85          print "$file: md5(\@data) failed\n";
86          $failed++;
87      }
88      if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
89          print "$file: MD5->new->add(\@data)->digest failed\n";
90          $failed++;
91      }
92      my $md5 = Digest::MD5->new;
93      for (@data) {
94          $md5->add($_);
95      }
96      if ($md5->digest ne $md5bin) {
97          print "$file: $md5->add()-loop failed\n";
98          $failed++;
99      }
100
101      print "not " if $failed;
102      print "ok ", ++$testno, "\n";
103 }
104
105
106 sub digest_file
107 {
108     my($file, $method) = @_;
109     $method ||= "digest";
110     #print "$file $method\n";
111
112     open(FILE, $file) or die "Can't open $file: $!";
113     binmode(FILE);
114     my $digest = Digest::MD5->new->addfile(*FILE)->$method();
115     close(FILE);
116
117     $digest;
118 }
119
120 sub cat_file
121 {
122     my($file) = @_;
123     local $/;  # slurp
124     open(FILE, $file) or die "Can't open $file: $!";
125     binmode(FILE);
126     my $tmp = <FILE>;
127     close(FILE);
128     $tmp;
129 }
130