]> git.vpit.fr Git - perl/modules/Test-Leaner.git/commitdiff
Prevent vivification of deleted elements by fetching the array values
authorVincent Pit <vince@profvince.com>
Tue, 28 Dec 2010 16:45:39 +0000 (17:45 +0100)
committerVincent Pit <vince@profvince.com>
Tue, 28 Dec 2010 16:45:39 +0000 (17:45 +0100)
lib/Test/Leaner.pm
t/26-is_deeply.t

index 8a41e4e8ee39c3f6a424d0f929c62bef79c4c5af..3980b4398a066880277282665352ec7dc1ac6c43 100644 (file)
@@ -491,7 +491,9 @@ sub _deep_check {
 
  if ($ry eq 'ARRAY') {
   if ($#$x == $#$y) {
-   _deep_check($x->[$_], $y->[$_]) or return 0 for 0 .. $#$y;
+   # Prevent vivification of deleted elements by fetching the array values.
+   my ($ex, $ey);
+   _deep_check($ex = $x->[$_], $ey = $y->[$_]) or return 0 for 0 .. $#$x;
    return 1;
   }
  } elsif ($ry eq 'HASH') {
index 0d6b84c9e565f28b5db11dab390ce908f9c0c742..d4550409f41cb36e6be0b74c411a00f4b4291c0f 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::Leaner tests => 21 + 2 + 1;
+use Test::Leaner tests => 21 + 2 + 1 + 2;
 
 my $lacunary = [ [ 1, 2, 3 ] => [ 1, 2, 3 ] ];
 delete $lacunary->[0]->[1];
@@ -100,3 +100,13 @@ push @tests, [ map Test::Leaner::TestIsDeeplyOverload->new('foo'), 1 .. 2 ];
 for my $t (@tests) {
  is_deeply $t->[0], $t->[1];
 }
+
+# Test vivification of deleted elements of an array
+
+{
+ my @l = (1);
+ $l[2] = 3;
+ is_deeply \@l, [ 1, undef, 3 ];
+ delete $l[2];
+ is_deeply \@l, [ 1 ];
+}