Don't use $_ as loop variable when calling arbitrary code (RT#81072)
[gitmo/Moo.git] / t / accessor-pred-clear.t
1 use strictures 1;
2 use Test::More;
3
4 {
5   package Foo;
6
7   use Moo;
8
9   my @params = (is => 'ro', lazy => 1, default => sub { 3 });
10
11   has one => (@params, predicate => 'has_one', clearer => 'clear_one');
12
13   has $_ => (@params, clearer => 1, predicate => 1) for qw( bar _bar );
14 }
15
16 my $foo = Foo->new;
17
18 for ( qw( one bar _bar ) ) {
19   my ($lead, $middle) = ('_' x /^_/, '_' x !/^_/);
20   my $predicate = $lead . "has$middle$_";
21   my $clearer   = $lead . "clear$middle$_";
22
23   ok(!$foo->$predicate, 'empty');
24   is($foo->$_, 3, 'lazy default');
25   ok($foo->$predicate, 'not empty now');
26   is($foo->$clearer, 3, 'clearer returns value');
27   ok(!$foo->$predicate, 'clearer empties');
28   is($foo->$_, 3, 'default re-fired');
29   ok($foo->$predicate, 'not empty again');
30 }
31
32 done_testing;