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 is_deeply $got, $exp, $desc;
53 return $want ? @ret : $ret[0];
57 my $d = Variable::Magic::getdata($_[0], $Lexical::Types::Test::Str::wiz);
58 isnt $d, undef, 'typed lexicals are tagged';
59 is ref($d), 'HASH', 'typed lexicals are correctly tagged';
65 my $y = check { "$x" } $x, { get => 1 }, 'interpolate';
66 is $y, 'abc', 'interpolate correctly';
68 check { $x .= "foo" } $x, { get => 1, set => 1 }, 'append';
69 is $x, 'abcfoo', 'append correctly';
72 check { $z = "bar" . $x } $z, { set => 1 }, 'scalar assign';
73 is $z, 'barabcfoo', 'scalar assign correctly';