]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - t/lib/Variable/Magic/TestWatcher.pm
Protect $@ inside Variable::Magic::TestWatcher::init_watcher
[perl/modules/Variable-Magic.git] / t / lib / Variable / Magic / TestWatcher.pm
index a8b5297d11ece058169c62ad8e76c943762080ab..a8499226e06232d82de7b5ca2d67492b4149e143 100644 (file)
@@ -5,12 +5,12 @@ use warnings;
 
 use Test::More;
 
-use Carp qw/croak/;
-use Variable::Magic qw/wizard/;
+use Carp qw<croak>;
+use Variable::Magic qw<wizard>;
 
-use base qw/Exporter/;
+use base qw<Exporter>;
 
-our @EXPORT = qw/init check/;
+our @EXPORT = qw<init_watcher watch>;
 
 sub _types {
  my $t = shift;
@@ -24,10 +24,11 @@ sub _types {
 
 our ($wiz, $prefix, %mg);
 
-sub init ($;$) {
+sub init_watcher ($;$) {
  croak 'can\'t initialize twice' if defined $wiz;
  my $types = _types shift;
  $prefix   = (defined) ? "$_: " : '' for shift;
+ local $@;
  %mg  = ();
  $wiz = eval 'wizard ' . join(', ', map {
   "$_ => sub { \$mg{$_}++;" . ($_ eq 'len' ? '$_[2]' : '0') . '}'
@@ -37,16 +38,25 @@ sub init ($;$) {
  return $wiz;
 }
 
-sub check (&;$$) {
+sub watch (&;$$) {
  my $code = shift;
  my $exp  = _types shift;
  my $desc = shift;
+ my $want = wantarray;
+ my @ret;
  local %mg = ();
  local $Test::Builder::Level = ($Test::Builder::Level || 0) + 1;
- my @ret = eval { $code->() };
+ local $@;
+ if (not defined $want) { # void context
+  eval { $code->() };
+ } elsif (not $want) { # scalar context
+  $ret[0] = eval { $code->() };
+ } else {
+  @ret = eval { $code->() };
+ }
  is        $@,   '',   $prefix . $desc . ' doesn\'t croak';
  is_deeply \%mg, $exp, $prefix . $desc . ' triggers magic correctly';
- return @ret;
+ return $want ? @ret : $ret[0];
 }
 
 our $mg_end;