X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FVariable-Magic.git;a=blobdiff_plain;f=t%2F34-glob.t;h=af77a4fb795470a6c06fde61654315ebd6a8cd92;hp=a1ece33acdd86b7dd69727ef5acd30f6baa9132a;hb=93df7812b9a0da8cdfa57a107eb2f8f4b4744b49;hpb=ad7c749baf8ebc2ff3e49d44b414f67f13f4ebf2 diff --git a/t/34-glob.t b/t/34-glob.t index a1ece33..af77a4f 100644 --- a/t/34-glob.t +++ b/t/34-glob.t @@ -1,52 +1,68 @@ #!perl -T +use strict; +use warnings; + use Test::More; -eval "use Symbol qw/gensym/"; -if ($@) { - plan skip_all => "Symbol::gensym required for testing magic for globs"; -} else { - plan tests => 7; +use lib 't/lib'; +use VPIT::TestHelpers; + +BEGIN { + load_or_skip_all('Symbol', undef, [ 'gensym' ]); + plan tests => 2 * 17 + 1; } -use Variable::Magic qw/wizard cast dispell/; +use Variable::Magic qw; -my @c = (0) x 5; -my @x = (0) x 5; +my %get = VMG_COMPAT_GLOB_GET ? (get => 1) : (); -sub check { - for (0 .. 4) { return 0 unless $c[$_] == $x[$_]; } - return 1; -} +use lib 't/lib'; +use Variable::Magic::TestWatcher; -my $i = -1; -my $wiz = wizard get => sub { ++$c[0] }, - set => sub { ++$c[1] }, - len => sub { ++$c[2] }, - clear => sub { ++$c[3] }, - free => sub { ++$c[4] }; -ok(check(), 'glob : create wizard'); +my $wiz = init_watcher + [ qw ], + 'glob'; local *a = gensym(); -cast *a, $wiz; -ok(check(), 'glob : cast'); +watch { cast *a, $wiz } +{ }, 'cast'; -local *b = *a; -ok(check(), 'glob : assign to'); +watch { local *b = *a } +{ %get }, 'assign to'; -*a = gensym(); -++$x[1]; -ok(check(), 'glob : assign'); +SKIP: { + skip 'This failed temporarily between perls 5.13.1 and 5.13.8 (included)' + => 5 * 2 if "$]" >= 5.013_001 and "$]" <= 5.013_008; + + my $cxt = 'void contex'; + my $exp = { set => 1 }; + + watch { *a = \1 } $exp, "assign scalar slot in $cxt"; + watch { *a = [ qw ] } $exp, "assign array slot in $cxt"; + watch { *a = { u => 1 } } $exp, "assign hash slot in $cxt"; + watch { *a = sub { } } $exp, "assign code slot in $cxt"; + watch { *a = gensym() } $exp, "assign glob in $cxt"; +} { - local *b = gensym(); - cast *b, $wiz; + my $cxt = 'scalar context'; + my $exp = { %get, set => 1 }; + my $v; + + $v = watch { *a = \1 } $exp, "assign scalar slot in $cxt"; + $v = watch { *a = [ qw ] } $exp, "assign array slot in $cxt"; + $v = watch { *a = { u => 1 } } $exp, "assign hash slot in $cxt"; + $v = watch { *a = sub { } } $exp, "assign code slot in $cxt"; + $v = watch { *a = gensym() } $exp, "assign glob in $cxt"; } -ok(check(), 'glob : scope end'); -undef *a; -ok(check(), 'glob : undef'); +watch { + local *b = gensym(); + watch { cast *b, $wiz } +{ }, 'cast 2'; +} +{ }, 'scope end'; + +%get = () if "$]" >= 5.013_007; + +watch { undef *a } +{ %get }, 'undef'; -dispell *a, $wiz; -ok(check(), 'glob : dispell'); +watch { dispell *a, $wiz } +{ %get }, 'dispell';