Replaced eq_bind() implementation to use Test::Deep::eq_deeply().
Norbert Buchmuller [Fri, 28 Nov 2008 08:26:34 +0000 (08:26 +0000)]
lib/SQL/Abstract/Test.pm

index 49f7800..4153add 100644 (file)
@@ -6,6 +6,8 @@ use base qw/Test::Builder::Module Exporter/;
 use Scalar::Util qw(looks_like_number blessed reftype);
 use Data::Dumper;
 use Carp;
+use Test::Builder;
+use Test::Deep qw(eq_deeply);
 
 our @EXPORT_OK = qw/&is_same_sql_bind &eq_sql &eq_bind 
                     $case_sensitive $sql_differ/;
@@ -45,58 +47,7 @@ sub is_same_sql_bind {
 sub eq_bind {
   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);
 }
 
 sub eq_sql {