From: Vincent Pit Date: Fri, 20 Feb 2009 23:29:04 +0000 (+0100) Subject: More tests for different op types X-Git-Tag: v0.32~20 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FVariable-Magic.git;a=commitdiff_plain;h=c1f14d9f670d6c298c7e120ea6e56cc764746537 More tests for different op types --- diff --git a/t/14-callbacks.t b/t/14-callbacks.t index 1f2c2de..cc4eb4c 100644 --- a/t/14-callbacks.t +++ b/t/14-callbacks.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 12 + (2 * 5 + 2 * 6 + 2 * 5); +use Test::More tests => 12 + 9 * (5 + 6 + 5); use Variable::Magic qw/wizard cast dispell VMG_OP_INFO_NAME VMG_OP_INFO_OBJECT/; @@ -65,11 +65,26 @@ is_deeply(\@callers, [ ([ 'main', $0, __LINE__-3 ]) x 2, ], 'caller into callback into eval returns the right thing'); -for ([ 'get', '$c', [ 'sassign', 'B::BINOP' ] ], - [ 'len', '@c', [ 'padav', 'B::OP' ] ]) { - my ($key, $var, $exp) = @$_; +sub Variable::Magic::TestPkg::foo { } + +my @tests = ( + [ 'len', '@c', undef, 'my $x = @c', [ 'padav', 'B::OP' ] ], + [ 'get', '$c', undef, '++$c', [ 'preinc', 'B::UNOP' ] ], + [ 'get', '$c', '$c = 1', '$c ** 2', [ 'pow', 'B::BINOP' ] ], + [ 'get', '$c', undef, 'my $x = $c', [ 'sassign', 'B::BINOP' ] ], + [ 'get', '$c', undef, '1 if $c', [ 'and', 'B::LOGOP' ] ], + [ 'set', '$c', undef, 'bless \$c, "main"', [ 'bless', 'B::LISTOP' ] ], + [ 'get', '$c', '$c = ""', '$c =~ /x/', [ 'match', 'B::PMOP' ] ], + [ 'get', '$c', '$c = "Variable::Magic::TestPkg"', + '$c->foo()', [ 'method_named', 'B::SVOP' ] ], + [ 'get', '$c', '$c = ""', '$c =~ y/x/y/', [ 'trans', 'B::PVOP' ] ], +); + +for (@tests) { + my ($key, $var, $init, $test, $exp) = @$_; for my $op_info (VMG_OP_INFO_NAME, VMG_OP_INFO_OBJECT, 3) { + our $done; my ($c, @c); # We must test for the $op correctness inside the callback because, if we @@ -77,6 +92,7 @@ for ([ 'get', '$c', [ 'sassign', 'B::BINOP' ] ], # points to will no longer exist. eval { $wiz = wizard $key => sub { + return if $done; my $op = $_[-1]; my $desc = "$key magic with op_info == $op_info"; if ($op_info == 1) { @@ -87,15 +103,19 @@ for ([ 'get', '$c', [ 'sassign', 'B::BINOP' ] ], } else { is $op, undef, "$desc gets the right op info"; } + $done = 1; () }, op_info => $op_info }; is $@, '', "$key wizard with op_info == $op_info doesn't croak"; + eval $init if defined $init; + eval "cast $var, \$wiz"; is $@, '', "$key cast with op_info == $op_info doesn't croak"; - eval "my \$x = $var"; + local $done = 0; + eval $test; is $@, '', "$key magic with op_info == $op_info doesn't croak"; eval "dispell $var, \$wiz";