Commit | Line | Data |
6bed1845 |
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; |