inlining for overloaded object isa/coerce
[gitmo/Moo.git] / t / lazy_isa.t
CommitLineData
6bed1845 1use strictures 1;
2use Test::More;
3use 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
28ok 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
31like(
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
37like(
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
43like(
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
49like(
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
55like(
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
61is(
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
67done_testing;