X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F27-local.t;h=ca557e13d73cf4692e897bb39f68d356a09131df;hb=f7f52ae0225ab0bf6304c21f5c8f53b2e9307bfa;hp=27dfd8bc2a9556451ac6f001aff0f1e2a76a2d1e;hpb=a86e3e47a167afadf7de1231d6401a1139330ad0;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/t/27-local.t b/t/27-local.t index 27dfd8b..ca557e1 100644 --- a/t/27-local.t +++ b/t/27-local.t @@ -5,25 +5,69 @@ use warnings; use Test::More; -use Variable::Magic qw/wizard cast MGf_LOCAL/; +use Variable::Magic qw; if (MGf_LOCAL) { - plan tests => 5; + plan tests => 2 * 3 + 1 + (2 + 2 * 7) + 1; } else { plan skip_all => 'No local magic for this perl'; } -my $c = 0; -my $wiz = wizard 'local' => sub { ++$c }; -is($c, 0, 'local : create wizard'); +use lib 't/lib'; +use Variable::Magic::TestWatcher; -local $a = int rand 1000; -my $res = cast $a, $wiz; -ok($res, 'local : cast succeeded'); -is($c, 0, 'local : cast didn\'t triggered the callback'); +my $wiz = init_watcher 'local', 'local'; + +our $a = int rand 1000; + +my $res = watch { cast $a, $wiz } { }, 'cast'; +ok $res, 'local: cast succeeded'; + +watch { local $a } { local => 1 }, 'localized'; { - local $a; - is($c, 1, 'local : localized'); + local $@; + + my $w1 = eval { wizard local => \undef, data => sub { 'w1' } }; + is $@, '', 'local: noop wizard creation does not croak'; + my $w2 = eval { wizard data => sub { 'w2' } }; + is $@, '', 'local: dummy wizard creation does not croak'; + + { + our $u; + eval { cast $u, $w1 }; + is $@, '', 'local: noop magic (first) cast does not croak'; + is getdata($u, $w1), 'w1', 'local: noop magic (first) cast succeeded'; + eval { cast $u, $w2 }; + is $@, '', 'local: dummy magic (second) cast does not croak'; + is getdata($u, $w2), 'w2', 'local: dummy magic (second) cast succeeded'; + my ($z1, $z2); + eval { + local $u = ''; + $z1 = getdata $u, $w1; + $z2 = getdata $u, $w2; + }; + is $@, '', 'local: noop/dummy magic invocation does not croak'; + is $z1, undef, 'local: noop magic (first) prevented magic copy'; + is $z2, 'w2', 'local: dummy magic (second) was copied'; + } + + { + our $v; + eval { cast $v, $w2 }; + is $@, '', 'local: dummy magic (first) cast does not croak'; + is getdata($v, $w2), 'w2', 'local: dummy magic (first) cast succeeded'; + eval { cast $v, $w1 }; + is $@, '', 'local: noop magic (second) cast does not croak'; + is getdata($v, $w1), 'w1', 'local: noop magic (second) cast succeeded'; + my ($z1, $z2); + eval { + local $v = ''; + $z1 = getdata $v, $w1; + $z2 = getdata $v, $w2; + }; + is $@, '', 'local: dummy/noop magic invocation does not croak'; + is $z2, 'w2', 'local: dummy magic (first) was copied'; + is $z1, undef, 'local: noop magic (second) prevented magic copy'; + } } -is($c, 1, 'local : end of local scope');