9 plan skip_all => 'Variable::Magic required to test magic'
10 unless eval "use Variable::Magic; 1";
14 package Lexical::Types::Test::Str;
16 use Variable::Magic qw/wizard cast/;
20 $wiz = wizard data => sub { +{ } },
21 get => sub { ++$_[1]->{get}; () },
22 set => sub { ++$_[1]->{set}; () };
25 sub TYPEDSCALAR { cast $_[1], $wiz, $_[2]; () }
32 defined and diag "Using Variable::Magic $_" for $Variable::Magic::VERSION;
35 use Lexical::Types as => 'Lexical::Types::Test';
38 my $got = Variable::Magic::getdata($_[1], $Lexical::Types::Test::Str::wiz);
39 my ($test, $exp, $desc) = @_[0, 2, 3];
43 local @{$got}{qw/get set/}; delete @{$got}{qw/get set/};
45 @ret = eval { $test->() };
46 } elsif (defined $want) {
47 $ret[0] = eval { $test->() };
51 local $Test::Builder::Level = $Test::Builder::Level + 1;
52 is_deeply $got, $exp, $desc;
54 return $want ? @ret : $ret[0];
58 my $d = Variable::Magic::getdata($_[0], $Lexical::Types::Test::Str::wiz);
59 isnt $d, undef, 'typed lexicals are tagged';
60 is ref($d), 'HASH', 'typed lexicals are correctly tagged';
66 my $y = check { "$x" } $x, { get => 1 }, 'interpolate';
67 is $y, 'abc', 'interpolate correctly';
69 check { $x .= "foo" } $x, { get => 1, set => 1 }, 'append';
70 is $x, 'abcfoo', 'append correctly';
73 check { $z = "bar" . $x } $z, { set => 1 }, 'scalar assign';
74 is $z, 'barabcfoo', 'scalar assign correctly';