X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F27-local.t;h=ca557e13d73cf4692e897bb39f68d356a09131df;hb=2a7199760cc1080be8e62e425d74a85f4eebcdfc;hp=9ecddd6b85878c48470d2bfa83024286c3cd714e;hpb=763ba8093427f3668368fa885741618ac6289d41;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/t/27-local.t b/t/27-local.t index 9ecddd6..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 }; -ok($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'); -ok($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; - ok($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'; + } } -ok($c == 1, 'local : end of local scope');