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]; () }
34 use Lexical::Types as => 'Lexical::Types::Test';
37 my $got = Variable::Magic::getdata($_[1], $Lexical::Types::Test::Str::wiz);
38 my ($test, $exp, $desc) = @_[0, 2, 3];
42 local @{$got}{qw/get set/}; delete @{$got}{qw/get set/};
44 @ret = eval { $test->() };
45 } elsif (defined $want) {
46 $ret[0] = eval { $test->() };
50 is_deeply $got, $exp, $desc;
52 return $want ? @ret : $ret[0];
56 my $d = Variable::Magic::getdata($_[0], $Lexical::Types::Test::Str::wiz);
57 isnt $d, undef, 'typed lexicals are tagged';
58 is ref($d), 'HASH', 'typed lexicals are correctly tagged';
64 my $y = check { "$x" } $x, { get => 1 }, 'interpolate';
65 is $y, 'abc', 'interpolate correctly';
67 check { $x .= "foo" } $x, { get => 1, set => 1 }, 'append';
68 is $x, 'abcfoo', 'append correctly';
71 check { $z = "bar" . $x } $z, { set => 1 }, 'scalar assign';
72 is $z, 'barabcfoo', 'scalar assign correctly';