Don't use $_ as loop variable when calling arbitrary code (RT#81072)
[gitmo/Moo.git] / t / lazy_isa.t
1 use strictures 1;
2 use Test::More;
3 use Test::Fatal;
4
5 {
6   package FooISA;
7
8   use Moo;
9
10   my $isa = sub { die "I want to die" unless $_[0] eq 'live' };
11
12   has a_lazy_attr => (
13     is => 'ro',
14     isa => $isa,
15     lazy => 1,
16     builder => '_build_attr',
17   );
18
19   has non_lazy => (
20     is => 'ro',
21     isa => $isa,
22     builder => '_build_attr',
23   );
24
25   sub _build_attr { 'die' }
26 }
27
28 ok my $lives = FooISA->new(a_lazy_attr=>'live', non_lazy=>'live'),
29   'expect to live when both attrs are set to live in init';
30
31 like(
32   exception { FooISA->new(a_lazy_attr=>'live', non_lazy=>'die') },
33   qr/I want to die/,
34   'expect to die when non lazy is set to die in init',
35 );
36
37 like(
38   exception { FooISA->new(a_lazy_attr=>'die', non_lazy=>'die') },
39   qr/I want to die/,
40   'expect to die when non lazy and lazy is set to die in init',
41 );
42
43 like(
44   exception { FooISA->new(a_lazy_attr=>'die', non_lazy=>'live') },
45   qr/I want to die/,
46   'expect to die when lazy is set to die in init',
47 );
48
49 like(
50   exception { FooISA->new() },
51   qr/I want to die/,
52   'expect to die when both lazy and non lazy are allowed to default',
53 );
54
55 like(
56   exception { FooISA->new(a_lazy_attr=>'live') },
57   qr/I want to die/,
58   'expect to die when lazy is set to live but non lazy is allowed to default',
59 );
60
61 is(
62   exception { FooISA->new(non_lazy=>'live') },
63   undef,
64   'ok when non lazy is set to something valid but lazy is allowed to default',
65 );
66
67 done_testing;