More DWIMminess for Class::Struct: calling the array or hash
[p5sagit/p5-mst-13.2.git] / t / lib / md5-file.t
index a5b726b..2aec7e3 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
 print "1..2\n";
 
 use strict;
-use Digest::MD5 qw(md5 md5_hex);
+use Digest::MD5 qw(md5 md5_hex md5_base64);
 
 #
 # This is the output of: 'md5sum MD5.pm MD5.xs'
@@ -15,16 +15,24 @@ my $EXPECT;
 
 if (ord('A') == 193) { # EBCDIC
 $EXPECT = <<EOT;
-dcc1f89cf6144d81e5f9d291d9849ef1  ext/Digest/MD5/MD5.pm
-61debd0ec12e131e1ba220e2f3ad2d26  ext/Digest/MD5/MD5.xs
+95a81f17a8e6c2273aecac12d8c4cb90  ext/Digest/MD5/MD5.pm
+e9e70adad1215b8fa43b52508f425ae9  ext/Digest/MD5/MD5.xs
 EOT
 } else { # ASCII
 $EXPECT = <<EOT;
-9e1d1183ff41717c91a563c41e08d672  ext/Digest/MD5/MD5.pm
-61debd0ec12e131e1ba220e2f3ad2d26  ext/Digest/MD5/MD5.xs
+3d0146bf194e4fe68733d00fba02a49e  ext/Digest/MD5/MD5.pm
+f32f264090fdd2b85a4a9be8b1342752  ext/Digest/MD5/MD5.xs
 EOT
 }
 
+my $B64 = 1;
+eval { require MIME::Base64; };
+if ($@) {
+    print $@;
+    print "# Will not test base64 methods\n";
+    $B64 = 0;
+}
+
 my $testno = 0;
 
 use File::Spec;
@@ -39,6 +47,11 @@ for (split /^/, $EXPECT) {
      }
      $file = File::Spec->catfile($path, $last);
      my $md5bin = pack("H*", $md5hex);
+     my $md5b64;
+     if ($B64) {
+        $md5b64 = MIME::Base64::encode($md5bin, "");
+        chop($md5b64); chop($md5b64);   # remove padding
+     }
      my $failed;
 
      if (digest_file($file, 'digest') ne $md5bin) {
@@ -51,6 +64,11 @@ for (split /^/, $EXPECT) {
         $failed++;
      }
 
+     if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
+        print "$file: Bad b64digest\n";
+        $failed++;
+     }
+
      my $data = cat_file($file);
      if (md5($data) ne $md5bin) {
         print "$file: md5() failed\n";
@@ -60,6 +78,10 @@ for (split /^/, $EXPECT) {
         print "$file: md5_hex() failed\n";
         $failed++;
      }
+     if ($B64 && md5_base64($data) ne $md5b64) {
+        print "$file: md5_base64() failed\n";
+        $failed++;
+     }
 
      if (Digest::MD5->new->add($data)->digest ne $md5bin) {
         print "$file: MD5->new->add(...)->digest failed\n";
@@ -69,6 +91,10 @@ for (split /^/, $EXPECT) {
         print "$file: MD5->new->add(...)->hexdigest failed\n";
         $failed++;
      }
+     if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
+        print "$file: MD5->new->add(...)->b64digest failed\n";
+        $failed++;
+     }
 
      my @data = split //, $data;
      if (md5(@data) ne $md5bin) {
@@ -100,7 +126,9 @@ sub digest_file
     #print "$file $method\n";
 
     open(FILE, $file) or die "Can't open $file: $!";
-    binmode(FILE);
+# Digests avove are generated on UNIX without CRLF
+# so leave handles in text mode
+#    binmode(FILE);
     my $digest = Digest::MD5->new->addfile(*FILE)->$method();
     close(FILE);
 
@@ -112,7 +140,9 @@ sub cat_file
     my($file) = @_;
     local $/;  # slurp
     open(FILE, $file) or die "Can't open $file: $!";
-    binmode(FILE);
+# Digests avove are generated on UNIX without CRLF
+# so leave handles in text mode
+#    binmode(FILE);
     my $tmp = <FILE>;
     close(FILE);
     $tmp;