]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Correct backtrace when wizard() croaks, and test it
authorVincent Pit <vince@profvince.com>
Fri, 5 Sep 2008 23:25:13 +0000 (01:25 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 5 Sep 2008 23:25:13 +0000 (01:25 +0200)
lib/Variable/Magic.pm
t/10-simple.t
t/12-sig.t
t/13-data.t

index ffc67b4c4d6d2d1ea09c6331b7c7d8b5936711e5..ea1836e181eda823b0c13046e3f57125e2737434 100644 (file)
@@ -277,7 +277,12 @@ sub wizard {
  push @cbs, 'dup'   if MGf_DUP;
  push @cbs, 'local' if MGf_LOCAL;
  push @cbs, qw/fetch store exists delete/ if VMG_UVAR;
- return _wizard(map $opts{$_}, @cbs);
+ my $ret = eval { _wizard(map $opts{$_}, @cbs) };
+ if (my $err = $@) {
+  $err =~ s/\sat\s+.*?\n//;
+  croak $err;
+ }
+ return $ret;
 }
 
 =head2 C<gensig>
index 236fc1d73485a15072d0faa289a1a4cc2e015f32..854cddeb027279db285de89463a20398a109cfb4 100644 (file)
@@ -15,12 +15,12 @@ $args += 4 if VMG_UVAR;
 for (0 .. 20) {
  next if $_ == $args;
  eval { Variable::Magic::_wizard(('hlagh') x $_) };
- like($@, qr/Wrong\s+number\s+of\s+arguments/, '_wizard called directly with a wrong number of arguments croaks');
+ like($@, qr/Wrong\s+number\s+of\s+arguments\s+at\s+\Q$0\E/, '_wizard called directly with a wrong number of arguments croaks');
 }
 
 for (0 .. 3) {
  eval { wizard(('dong') x (2 * $_ + 1)) };
- like($@, qr/Wrong\s+number\s+of\s+arguments\s+for\s+wizard\(\)/, 'wizard called with an odd number of arguments croaks');
+ like($@, qr/Wrong\s+number\s+of\s+arguments\s+for\s+&?wizard\(\)\s+at\s+\Q$0\E/, 'wizard called with an odd number of arguments croaks');
 }
 
 my $sig = gensig;
@@ -49,7 +49,7 @@ is($@, '',      're-dispell from wrong sig doesn\'t croak');
 is($res, undef, 're-dispell from wrong sig doesn\'t return anything');
 
 $res = eval { dispell $a, undef };
-like($@, qr/Invalid\s+wizard\s+object/, 're-dispell from undef croaks');
+like($@, qr/Invalid\s+wizard\s+object\s+at\s+\Q$0\E/, 're-dispell from undef croaks');
 is($res, undef, 're-dispell from undef doesn\'t return anything');
 
 $res = eval { dispell $a, $sig };
@@ -72,5 +72,5 @@ is($@, '',      'cast from obsolete signature doesn\'t croak');
 is($res, undef, 'cast from obsolete signature returns undef');
 
 $res = eval { cast $c, undef };
-like($@, qr/Invalid\s+numeric\s+signature/, 'cast from undef croaks');
+like($@, qr/Invalid\s+numeric\s+signature\s+at\s+\Q$0\E/, 'cast from undef croaks');
 is($res, undef, 'cast from undef doesn\'t return anything');
index 636ad7e086d17b468ac47c2666c3cd6f6e54865e..662546d18e886e37d8191dfd8247d0bfb4f4ccce 100644 (file)
@@ -25,7 +25,7 @@ my ($a, $b, $c, $d) = 1 .. 4;
  is($sig, getsig $wiz2,  'retrieved wizard signature is correct');
 
  my $wiz3 = eval { wizard sig => [ ] };
- like($@, qr/Invalid\s+numeric\s+signature/, 'non numeric signature croaks');
+ like($@, qr/Invalid\s+numeric\s+signature\s+at\s+\Q$0\E/, 'non numeric signature croaks');
  is($wiz3, undef, 'non numeric signature doesn\'t return anything');
 
  my $a = 1;
index d1dc440200c0dd2a38cb72414ecd2ed6fac8ea9b..94e73e59bd49f5c2dfb7db734faaba24b155e999 100644 (file)
@@ -54,7 +54,7 @@ is($@, '',       'getdata from invalid sig doesn\'t croak');
 is($data, undef, 'getdata from invalid sig returns undef');
 
 $data = eval { getdata $a, undef };
-like($@, qr/Invalid\s+wizard\s+object/, 'getdata from undef croaks');
+like($@, qr/Invalid\s+wizard\s+object\s+at\s+\Q$0\E/, 'getdata from undef croaks');
 is($data, undef, 'getdata from undef doesn\'t return anything');
 
 $res = eval { dispell $a, $wiz };