X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FVariable-Magic.git;a=blobdiff_plain;f=t%2F16-huf.t;h=024a39c9bb32ad90c71d2e6d571213b3cb8c01e0;hp=6a2f750834587a701918fd5360fd37ea6b505686;hb=93df7812b9a0da8cdfa57a107eb2f8f4b4744b49;hpb=a86e3e47a167afadf7de1231d6401a1139330ad0 diff --git a/t/16-huf.t b/t/16-huf.t index 6a2f750..024a39c 100644 --- a/t/16-huf.t +++ b/t/16-huf.t @@ -5,48 +5,44 @@ use warnings; use Test::More; -use Variable::Magic qw/wizard cast dispell VMG_UVAR/; +use lib 't/lib'; +use VPIT::TestHelpers; -if (!VMG_UVAR) { - plan skip_all => 'No nice uvar magic for this perl'; -} +use Variable::Magic qw; -eval "use Hash::Util::FieldHash"; -if ($@) { - plan skip_all => 'Hash::Util::FieldHash required for testing uvar interaction'; +if (VMG_UVAR) { + load_or_skip_all('Hash::Util::FieldHash', undef, [ ]); + plan tests => 2 * 5 + 7 + 1; } else { - plan tests => 12; + skip_all 'No nice uvar magic for this perl'; } +use Variable::Magic::TestWatcher; + +my $wiz = init_watcher [ qw ], 'huf'; +ok defined($wiz), 'huf: wizard with uvar is defined'; +is ref($wiz), 'SCALAR', 'huf: wizard with uvar is a scalar ref'; + Hash::Util::FieldHash::fieldhash(\my %h); my $obj = { }; bless $obj, 'Variable::Magic::Test::Mock'; $h{$obj} = 5; -my ($w, $c) = (undef, 0); +my ($res) = watch { cast %h, $wiz } { }, 'cast uvar magic on fieldhash'; +ok $res, 'huf: cast uvar magic on fieldhash succeeded'; -eval { $w = wizard fetch => sub { ++$c }, store => sub { --$c } }; -ok(!$@, "wizard with uvar doesn't croak ($@)"); -ok(defined $w, 'wizard with uvar is defined'); -is(ref $w, 'SCALAR', 'wizard with uvar is a scalar ref'); +my ($s) = watch { $h{$obj} } { fetch => 1 }, 'fetch on magical fieldhash'; +is $s, 5, 'huf: fetch on magical fieldhash succeeded'; -my $res = eval { cast %h, $w }; -ok(!$@, "cast uvar magic on fieldhash doesn't croak ($@)"); -ok($res, 'cast uvar magic on fieldhash is valid'); +watch { $h{$obj} = 7 } { store => 1 }, 'store on magical fieldhash'; +is $h{$obj}, 7, 'huf: store on magical fieldhash succeeded'; -my $s = $h{$obj}; -is($s, 5, 'fetch magic on fieldhash doesn\'t clobber'); -is($c, 1, 'fetch magic on fieldhash'); - -$h{$obj} = 7; -is($c, 0, 'store magic on fieldhash'); -is($h{$obj}, 7, 'store magic on fieldhash doesn\'t clobber'); # $c == 1 - -$res = eval { dispell %h, $w }; -ok(!$@, "dispell uvar magic on fieldhash doesn't croak ($@)"); -ok($res, 'dispell uvar magic on fieldhash is valid'); +($res) = watch { dispell %h, $wiz } { }, 'dispell uvar magic on fieldhash'; +ok $res, 'huf: dispell uvar magic on fieldhash succeeded'; $h{$obj} = 11; $s = $h{$obj}; -is($s, 11, 'store/fetch on fieldhash after dispell still ok'); +is $s, 11, 'huf: store/fetch on fieldhash after dispell still ok'; + +$Variable::Magic::TestWatcher::mg_end = { fetch => 1 };