* Replaced eq_bind() implementation to use Test::Deep::eq_deeply().
Norbert Buchmuller [Fri, 28 Nov 2008 15:43:36 +0000 (16:43 +0100)]
Makefile.PL
t/lib/DBIC/SqlMakerTest.pm

index c1b6596..351dcaa 100644 (file)
@@ -33,6 +33,7 @@ test_requires 'DBD::SQLite'         => 1.14;
 test_requires 'Test::Builder'       => 0.33;
 test_requires 'Test::Warn'          => 0.11;
 test_requires 'Test::Exception'     => 0;
+test_requires 'Test::Deep'          => 0;
 
 install_script 'script/dbicadmin';
 
index 95ff407..0ab8939 100644 (file)
@@ -28,6 +28,8 @@ our @EXPORT = qw/
 
   use Scalar::Util qw(looks_like_number blessed reftype);
   use Data::Dumper;
+  use Test::Builder;
+  use Test::Deep qw(eq_deeply);
 
   our $tb = __PACKAGE__->builder;
 
@@ -69,58 +71,7 @@ our @EXPORT = qw/
   {
     my ($bind_ref1, $bind_ref2) = @_;
 
-    my $ref1 = ref $bind_ref1;
-    my $ref2 = ref $bind_ref2;
-
-    return 0 if $ref1 ne $ref2;
-
-    if ($ref1 eq 'SCALAR' || $ref1 eq 'REF') {
-      return eq_bind($$bind_ref1, $$bind_ref2);
-    } elsif ($ref1 eq 'ARRAY') {
-      return 0 if scalar @$bind_ref1 != scalar @$bind_ref2;
-      for (my $i = 0; $i < @$bind_ref1; $i++) {
-        return 0 if !eq_bind($bind_ref1->[$i], $bind_ref2->[$i]);
-      }
-      return 1;
-    } elsif ($ref1 eq 'HASH') {
-        return
-          eq_bind(
-            [sort keys %$bind_ref1],
-            [sort keys %$bind_ref2]
-          )
-          && eq_bind(
-            [map { $bind_ref1->{$_} } sort keys %$bind_ref1],
-            [map { $bind_ref2->{$_} } sort keys %$bind_ref2]
-          );
-    } else {
-      if (!defined $bind_ref1 || !defined $bind_ref2) {
-        return !(defined $bind_ref1 ^ defined $bind_ref2);
-      } elsif (blessed($bind_ref1) || blessed($bind_ref2)) {
-        return 0 if (blessed($bind_ref1) || "") ne (blessed($bind_ref2) || "");
-        return 1 if $bind_ref1 == $bind_ref2;  # uses overloaded '=='
-        # fallback: compare the guts of the object
-        my $reftype1 = reftype $bind_ref1;
-        my $reftype2 = reftype $bind_ref2;
-        return 0 if $reftype1 ne $reftype2;
-        if ($reftype1 eq 'SCALAR' || $reftype1 eq 'REF') {
-          $bind_ref1 = $$bind_ref1;
-          $bind_ref2 = $$bind_ref2;
-        } elsif ($reftype1 eq 'ARRAY') {
-          $bind_ref1 = [@$bind_ref1];
-          $bind_ref2 = [@$bind_ref2]; 
-        } elsif ($reftype1 eq 'HASH') {
-          $bind_ref1 = {%$bind_ref1};
-          $bind_ref2 = {%$bind_ref2};
-        } else { 
-          return 0;
-        }
-        return eq_bind($bind_ref1, $bind_ref2); 
-      } elsif (looks_like_number($bind_ref1) && looks_like_number($bind_ref2)) {
-        return $bind_ref1 == $bind_ref2;
-      } else { 
-        return $bind_ref1 eq $bind_ref2;
-      }
-    }
+    return eq_deeply($bind_ref1, $bind_ref2);
   }
 }