12 load_or_skip_all('Variable::Magic', undef, [ ]);
16 package Lexical::Types::Test::Str;
18 use Variable::Magic qw<wizard cast>;
22 $wiz = wizard data => sub { +{ } },
23 get => sub { ++$_[1]->{get}; () },
24 set => sub { ++$_[1]->{set}; () };
27 sub TYPEDSCALAR { cast $_[1], $wiz, $_[2]; () }
36 use Lexical::Types as => 'Lexical::Types::Test';
39 my $got = Variable::Magic::getdata($_[1], $Lexical::Types::Test::Str::wiz);
40 my ($test, $exp, $desc) = @_[0, 2, 3];
44 local @{$got}{qw<get set>};
45 delete @{$got}{qw<get set>};
47 @ret = eval { $test->() };
48 } elsif (defined $want) {
49 $ret[0] = eval { $test->() };
53 local $Test::Builder::Level = $Test::Builder::Level + 1;
54 is_deeply $got, $exp, $desc;
56 return $want ? @ret : $ret[0];
60 my $d = Variable::Magic::getdata($_[0], $Lexical::Types::Test::Str::wiz);
61 isnt $d, undef, 'typed lexicals are tagged';
62 is ref($d), 'HASH', 'typed lexicals are correctly tagged';
68 my $y = check { "$x" } $x, { get => 1 }, 'interpolate';
69 is $y, 'abc', 'interpolate correctly';
71 check { $x .= "foo" } $x, { get => 1, set => 1 }, 'append';
72 is $x, 'abcfoo', 'append correctly';
75 check { $z = "bar" . $x } $z, { set => 1 }, 'scalar assign';
76 is $z, 'barabcfoo', 'scalar assign correctly';