diff -ur libtest-unit-perl-0.24.debian/lib/Test/Unit/Assert.pm libtest-unit-perl-0.24/lib/Test/Unit/Assert.pm
--- libtest-unit-perl-0.24.debian/lib/Test/Unit/Assert.pm 2004-05-18 14:35:41.000000000 -0400
+++ libtest-unit-perl-0.24/lib/Test/Unit/Assert.pm 2004-05-18 15:09:53.000000000 -0400
@@ -219,6 +219,7 @@
}
# Shamelessly pinched from Test::More and adapted to Test::Unit.
+our %Seen_Refs = ();
our @Data_Stack;
my $DNE = bless [], 'Does::Not::Exist';
sub assert_deep_equals {
@@ -236,23 +237,36 @@
}
local @Data_Stack = ();
+ local %Seen_Refs = ();
if (! $self->_deep_check($this, $that)) {
Test::Unit::Failure->throw(
-text => @_ ? join('', @_)
: $self->_format_stack(@Data_Stack)
);
}
-}
+}
sub _deep_check {
my $self = shift;
my ($e1, $e2) = @_;
- # Quiet uninitialized value warnings when comparing undefs.
- local $^W = 0;
+ if ( ! defined $e1 || ! defined $e2 ) {
+ return 1 if !defined $e1 && !defined $e2;
+ push @Data_Stack, { vals => [$e1, $e2] };
+ return 0;
+ }
+
+ return 0 if ( (defined $e1 && $e1 eq $DNE)
+ || (defined $e2 && $e2 eq $DNE ));
return 1 if $e1 eq $e2;
+ if ( ref $e1 && ref $e2 ) {
+ my $e2_ref = "$e2";
+ return 1 if defined $Seen_Refs{$e1} && $Seen_Refs{$e1} eq $e2_ref;
+ $Seen_Refs{$e1} = $e2_ref;
+ }
+
if (UNIVERSAL::isa($e1, 'ARRAY') and UNIVERSAL::isa($e2, 'ARRAY')) {
return $self->_eq_array($e1, $e2);
}
Only in libtest-unit-perl-0.24/lib/Test/Unit: Assert.pm~
diff -ur libtest-unit-perl-0.24.debian/t/tlib/AssertTest.pm libtest-unit-perl-0.24/t/tlib/AssertTest.pm
--- libtest-unit-perl-0.24.debian/t/tlib/AssertTest.pm 2004-05-18 14:35:41.000000000 -0400
+++ libtest-unit-perl-0.24/t/tlib/AssertTest.pm 2004-05-18 15:07:56.000000000 -0400
@@ -11,6 +11,8 @@
use Error qw/:try/;
use Class::Inner;
+use Data::Dumper;
+
use vars qw/@ISA/;
@ISA = qw(Test::Unit::TestCase ExceptionChecker);
@@ -328,6 +330,19 @@
$self->assert_not_null(10);
}
+sub deep_clone {
+ my $x = $_[0];
+
+ no strict;
+
+ $Data::Dumper::Purity = 1;
+
+ eval Dumper( $x );
+
+ # Data::Dumper assigns to VAR1.
+ return $VAR1;
+}
+
sub test_assert_deep_equals {
my $self = shift;
@@ -366,6 +381,30 @@
},
);
+ my %family = ( john => { name => 'John Doe',
+ spouse => undef,
+ children => [],
+ },
+ jane => { name => 'Jane Doe',
+ spouse => undef,
+ children => [],
+ },
+ baby => { name => 'Baby Doll',
+ spouse => undef,
+ children => [],
+ },
+ );
+ $family{john}{spouse} = $family{jane};
+ $family{jane}{spouse} = $family{john};
+ push @{$family{john}{children}}, $family{baby};
+ push @{$family{jane}{children}}, $family{baby};
+
+ my $copy = deep_clone( \%family );
+ $self->assert_deep_equals( \%family, $copy );
+
+ my $bad_copy = deep_clone( \%family );
+ $bad_copy->{jane}{spouse} = $bad_copy->{baby};
+
my $differ = sub {
my ($a, $b) = @_;
qr/^Structures\ begin\ differing\ at: $ \n
@@ -381,6 +420,12 @@
'Both arguments were not references' => [ '', 0 ],
$differ->(qw/ARRAY HASH/) => [ [], {} ],
$differ->(qw/ARRAY HASH/) => [ [1,2], {1,2} ],
+ $differ->( 'ARRAY', 'undef' ) => [ { 'test' => []},
+ { 'test' => undef } ],
+ $differ->( 'ARRAY', 'not\ exist' ) => [ { 'test' => []}, {} ],
+ $differ->( 'undef', 'ARRAY' ) => [ { 'test' => undef },
+ { 'test' => []} ],
+ $differ->( '', 'undef' ) => [ [ '' ], [ undef ] ],
$differ->('not\ exist', "'3'") => [ [1,2], [1,2,3] ],
$differ->("'3'", 'not\ exist') => [ [1,2,3], [1,2] ],
$differ->("'wahhhhh'", "'wahhhh'") => [
@@ -398,6 +443,7 @@
},
}
],
+ $differ->( 'HASH', 'undef') => [ \%family, $bad_copy ],
);
my @tests = ();
Only in libtest-unit-perl-0.24/t/tlib: AssertTest.pm~
syntax highlighted by Code2HTML, v. 0.9.1