Integrate Digest-1.00 and Digest-MD5-2.13, from Gisle Aas.
[p5sagit/p5-mst-13.2.git] / t / lib / md5-file.t
CommitLineData
3357b1b1 1BEGIN {
2 chdir 't' if -d 't';
3 @INC = '../lib';
4}
5
6print "1..2\n";
7
8use strict;
9use Digest::MD5 qw(md5 md5_hex);
10
11#
12# This is the output of: 'md5sum MD5.pm MD5.xs'
13#
14my $EXPECT = <<EOT;
159e1d1183ff41717c91a563c41e08d672 ext/Digest/MD5/MD5.pm
1661debd0ec12e131e1ba220e2f3ad2d26 ext/Digest/MD5/MD5.xs
17EOT
18
19my $testno = 0;
20
21use File::Spec;
22
23for (split /^/, $EXPECT) {
24 my($md5hex, $file) = split ' ';
25 my @path = split(m:/:, $file);
26 my $last = pop @path;
27 my $path = File::Spec->updir;
28 while (@path) {
29 $path = File::Spec->catdir($path, shift @path);
30 }
31 $file = File::Spec->catfile($path, $last);
32 my $md5bin = pack("H*", $md5hex);
33 my $failed;
34
35 if (digest_file($file, 'digest') ne $md5bin) {
36 print "$file: Bad digest\n";
37 $failed++;
38 }
39
40 if (digest_file($file, 'hexdigest') ne $md5hex) {
41 print "$file: Bad hexdigest\n";
42 $failed++;
43 }
44
45 my $data = cat_file($file);
46 if (md5($data) ne $md5bin) {
47 print "$file: md5() failed\n";
48 $failed++;
49 }
50 if (md5_hex($data) ne $md5hex) {
51 print "$file: md5_hex() failed\n";
52 $failed++;
53 }
54
55 if (Digest::MD5->new->add($data)->digest ne $md5bin) {
56 print "$file: MD5->new->add(...)->digest failed\n";
57 $failed++;
58 }
59 if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
60 print "$file: MD5->new->add(...)->hexdigest failed\n";
61 $failed++;
62 }
63
64 my @data = split //, $data;
65 if (md5(@data) ne $md5bin) {
66 print "$file: md5(\@data) failed\n";
67 $failed++;
68 }
69 if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
70 print "$file: MD5->new->add(\@data)->digest failed\n";
71 $failed++;
72 }
73 my $md5 = Digest::MD5->new;
74 for (@data) {
75 $md5->add($_);
76 }
77 if ($md5->digest ne $md5bin) {
78 print "$file: $md5->add()-loop failed\n";
79 $failed++;
80 }
81
82 print "not " if $failed;
83 print "ok ", ++$testno, "\n";
84}
85
86
87sub digest_file
88{
89 my($file, $method) = @_;
90 $method ||= "digest";
91 #print "$file $method\n";
92
93 open(FILE, $file) or die "Can't open $file: $!";
94 binmode(FILE);
95 my $digest = Digest::MD5->new->addfile(*FILE)->$method();
96 close(FILE);
97
98 $digest;
99}
100
101sub cat_file
102{
103 my($file) = @_;
104 local $/; # slurp
105 open(FILE, $file) or die "Can't open $file: $!";
106 binmode(FILE);
107 my $tmp = <FILE>;
108 close(FILE);
109 $tmp;
110}
111