]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
A crude warning test
authorVincent Pit <vince@profvince.com>
Wed, 17 Jun 2009 14:15:11 +0000 (16:15 +0200)
committerVincent Pit <vince@profvince.com>
Wed, 17 Jun 2009 14:15:11 +0000 (16:15 +0200)
autovivification.xs
t/30-scope.t

index c2bb4080b9ffc861662406889162e63e2ca77529..68bc21789fda3452a09550ecd9a3276cb8c0a2b1 100644 (file)
@@ -309,9 +309,6 @@ STATIC OP *a_pp_rv2hv(pTHX) {
 
 /* ... pp_deref (aelem,helem,rv2sv,padsv) .................................. */
 
-STATIC const char a_msg_forbidden[]  = "Reference vivification forbidden";
-STATIC const char a_msg_impossible[] = "Can't vivify reference";
-
 STATIC OP *a_pp_deref(pTHX) {
  a_op_info oi;
  UV flags;
@@ -334,11 +331,11 @@ deref:
    SPAGAIN;
    if (!SvOK(TOPs)) {
     if (flags & A_HINT_STRICT)
-     croak(a_msg_forbidden);
+     croak("Reference vivification forbidden");
     else if (flags & A_HINT_WARN)
-      warn(a_msg_forbidden);
+      warn("Reference was vivified");
     else /* A_HINT_STORE */
-     croak(a_msg_impossible);
+     croak("Can't vivify reference");
    }
   }
 
index 2e951cfe6bc14615aaf2b3f8e7b10716842125e2..857a7809ce1bf7480ecd627f62624e4a94476e72 100644 (file)
@@ -3,10 +3,25 @@
 use strict;
 use warnings;
 
-use Test::More tests => 4;
+use Test::More tests => 8;
 
 use lib 't/lib';
 
+{
+ my @w;
+ my $x;
+ my $res = eval {
+  local $SIG{__WARN__} = sub { push @w, join '', 'warn:', @_ };
+  no autovivification qw/warn fetch/;
+  $x->{a};
+ };
+ is   @w,    1,     'warned only once';
+ like $w[0], qr/^warn:Reference was vivified at \Q$0\E line ${\(__LINE__-3)}/,
+                        'warning looks correct';
+ is_deeply $x,   undef, 'didn\'t vivified';
+ is        $res, undef, 'returned undef';
+}
+
 our $blurp;
 
 {
@@ -26,4 +41,3 @@ our $blurp;
  $expect->{r2_eval} = { } if $] <  5.009005;
  is_deeply $blurp, $expect, 'second require test didn\'t vivify';
 }
-