]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
Really test non-ref arrays and hashes
authorVincent Pit <vince@profvince.com>
Wed, 17 Jun 2009 22:04:34 +0000 (00:04 +0200)
committerVincent Pit <vince@profvince.com>
Wed, 17 Jun 2009 22:04:34 +0000 (00:04 +0200)
t/20-hash.t
t/21-array.t
t/lib/autovivification/TestCases.pm

index aac9f975621c2580c2b10c13254c8a629afa8787..e7a1703e9508e5b7b4f89bf4c77b630ef5e2d9c7 100644 (file)
@@ -118,12 +118,12 @@ $x->{a} = 1 # 1 for $x->{b}; () # '', undef, { a => 1, b => undef } # +store
 
 --- dereferencing ---
 
-$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/Can't use an undefined value as a HASH reference/ : ''), undef, undef
-$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/Can't use an undefined value as a HASH reference/ : ''), undef, undef #
-$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/Can't use an undefined value as a HASH reference/ : ''), undef, undef # +fetch
-$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/Can't use an undefined value as a HASH reference/ : ''), undef, undef # +exists
-$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/Can't use an undefined value as a HASH reference/ : ''), undef, undef # +delete
-$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/Can't use an undefined value as a HASH reference/ : ''), undef, undef # +store
+$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/^Can't use an undefined value as a HASH reference/ : ''), undef, undef
+$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/^Can't use an undefined value as a HASH reference/ : ''), undef, undef #
+$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/^Can't use an undefined value as a HASH reference/ : ''), undef, undef # +fetch
+$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/^Can't use an undefined value as a HASH reference/ : ''), undef, undef # +exists
+$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/^Can't use an undefined value as a HASH reference/ : ''), undef, undef # +delete
+$x # no warnings 'uninitialized'; my @a = %$x; () # ($strict ? qr/^Can't use an undefined value as a HASH reference/ : ''), undef, undef # +store
 
 $x->{a} = 1 # my @a = %$x; () # '', undef, { a => 1 } # +fetch
 $x->{a} = 1 # my @a = %$x; () # '', undef, { a => 1 } # +exists
index eeb88117ae16a241099879b2924e4ca31a8553c4..744c4927549ff2bb3a2399d3bda5af4a3cc078d8 100644 (file)
@@ -118,12 +118,12 @@ $x->[0] = 1 # 1 for $x->[1]; () # '', undef, [ 1, undef ] # +store
 
 --- dereferencing ---
 
-$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/Can't use an undefined value as an ARRAY reference/ : ''), undef, undef
-$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/Can't use an undefined value as an ARRAY reference/ : ''), undef, undef #
-$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +fetch
-$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +exists
-$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +delete
-$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +store
+$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/^Can't use an undefined value as an ARRAY reference/ : ''), undef, undef
+$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/^Can't use an undefined value as an ARRAY reference/ : ''), undef, undef #
+$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/^Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +fetch
+$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/^Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +exists
+$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/^Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +delete
+$x # no warnings 'uninitialized'; my @a = @$x; () # ($strict ? qr/^Can't use an undefined value as an ARRAY reference/ : ''), undef, undef # +store
 
 $x->[0] = 1 # my @a = @$x; () # '', undef, [ 1 ] # +fetch
 $x->[0] = 1 # my @a = @$x; () # '', undef, [ 1 ] # +exists
index 4170a3736ddc4da3139ea09091fa2df5c3ab7d04..73faad8eed18f194ad07a9aad34c6481bdd47b4c 100644 (file)
@@ -68,9 +68,24 @@ sub testcase_ok {
   my $var = $_->[0];
   if ($var =~ /\$/) {
    my @new = @$_;
-   $new[0] =~ s/^$/$sigil/;
-   $new[1] =~ s/$var\->/$var/g;
-   $new[2] =~ s/$var\->/$var/g;
+   $new[0] =~ s/^\$/$sigil/;
+   for ($new[1], $new[2]) {
+    s/\Q$sigil$var\E/$new[0]/g;
+    s/\Q$var\E\->/$var/g;
+   }
+   my $simple      = $new[2] !~ /->/;
+   my $plain_deref = $new[2] =~ /\Q$new[0]\E/;
+   my $empty  = { '@' => '[ ]', '%' => '{ }' }->{$sigil};
+   if (($simple
+        and (   $new[3] =~ m!qr/\^Reference vivification forbidden.*?/!
+             or $new[3] =~ m!qr/\^Can't vivify reference.*?/!))
+    or ($plain_deref
+        and $new[3] =~ m!qr/\^Can't use an undefined value as a.*?/!)) {
+    $new[1] = '';
+    $new[2] = 1;
+    $new[3] = "'', 1, $empty";
+   }
+   $new[3] =~ s/,\s*undef\s*$/, $empty/;
    push @extra, \@new;
   }
  }