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