X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2Flib%2FScope%2FUpper%2FTestGenerator.pm;h=b4f6e1b6762d26e8aa179c468adbf54da8e70b6f;hb=eefb9e3f4b67e0aa0e8c3e705d7f7010a49f0540;hp=99764d5618f3fad75c3198f9206d31d0c065b36c;hpb=f3c40d6f05f68f105430a219355dc4bd2979f3fe;p=perl%2Fmodules%2FScope-Upper.git diff --git a/t/lib/Scope/Upper/TestGenerator.pm b/t/lib/Scope/Upper/TestGenerator.pm index 99764d5..b4f6e1b 100644 --- a/t/lib/Scope/Upper/TestGenerator.pm +++ b/t/lib/Scope/Upper/TestGenerator.pm @@ -3,17 +3,24 @@ package Scope::Upper::TestGenerator; use strict; use warnings; -our ($call, $test, $local, $testlocal, $allblocks); +our ($call, $test, $allblocks); -$local = sub { +our $local_var = '$x'; + +our $local_decl = sub { + my $x = $_[3]; + return "local $local_var = $x;\n"; +}; + +our $local_cond = sub { my $x = $_[3]; - return "local \$x = $x;\n"; + return defined $x ? "($local_var eq $x)" : "(!defined($local_var))"; }; -$testlocal = sub { +our $local_test = sub { my ($height, $level, $i, $x) = @_; - my $j = defined $x ? $x : 'undef'; - return "is(\$x, $j, 'x h=$height, l=$level, i=$i');\n"; + my $cond = $local_cond->(@_); + return "ok($cond, 'local h=$height, l=$level, i=$i');\n"; }; my @blocks = ( @@ -25,16 +32,48 @@ my @blocks = ( [ 'eval q[', '];' ], ); +push @blocks, [ 'given (1) {', '}' ] if "$]" >= 5.010_001; + +my %exports = ( + verbose_is => \&verbose_is, +); + sub import { - if ($] >= 5.010001) { - push @blocks, [ 'given (1) { my $_;', '}' ]; + if ("$]" >= 5.017_011) { + require warnings; + warnings->unimport('experimental::smartmatch'); + } + + if ("$]" >= 5.010_001) { require feature; feature->import('switch'); } + + my $pkg = caller; + while (my ($name, $code) = each %exports) { + no strict 'refs'; + *{$pkg.'::'.$name} = $code; + } } @blocks = map [ map "$_\n", @$_ ], @blocks; +sub verbose_is ($$;$) { + my ($a, $b, $desc) = @_; + + if (defined $::testcase + and (defined $b) ? (not defined $a or $a ne $b) : defined $a) { + Test::Leaner::diag(<(@_) if $height < $i; + my @res; my @blks = $allblocks ? @blocks : _block(@_); + my $up = gen($height, $level, $i + 1, $x); + my $t = $test->(@_); + my $loct = $local_test->(@_); for my $base (@$up) { for my $blk (@blks) { - push @res, $blk->[0] . $base . $test->(@_) . $testlocal->(@_) . $blk->[1]; + push @res, join '', $blk->[0], $base, $t, $loct, $blk->[1]; } } - $_[3] = $i + 1; - $up = gen($height, $level, $i + 1, $i + 1); + + $_[3] = $x = $i + 1; + $up = gen($height, $level, $i + 1, $x); + $t = $test->(@_); + my $locd = $local_decl->(@_); + $loct = $local_test->(@_); for my $base (@$up) { for my $blk (@blks) { - push @res, $blk->[0] . - $local->(@_) . $base . $test->(@_) . $testlocal->(@_) - . $blk->[1]; + push @res, join '', $blk->[0], $locd, $base, $t, $loct, $blk->[1]; } } + return \@res; }