Commit | Line | Data |
46389f86 |
1 | use strictures 1; |
2 | use Test::More; |
3 | |
e6c7abb4 |
4 | my $c_ran; |
46389f86 |
5 | { |
6 | package Foo; |
7 | |
8 | use Sub::Quote; |
b1eebd55 |
9 | use Moo; |
46389f86 |
10 | |
11 | has one => (is => 'ro', lazy => 1, default => quote_sub q{ {} }); |
12 | has two => (is => 'ro', lazy => 1, builder => '_build_two'); |
13 | sub _build_two { {} } |
14 | has three => (is => 'ro', default => quote_sub q{ {} }); |
649ac264 |
15 | has four => (is => 'ro', builder => '_build_four'); |
46389f86 |
16 | sub _build_four { {} } |
d02da2bc |
17 | has five => (is => 'ro', init_arg => undef, default => sub { {} }); |
e8dc5201 |
18 | has six => (is => 'ro', builder => 1); |
19 | sub _build_six { {} } |
c9a5dcbd |
20 | has seven => (is => 'ro', required => 1, default => quote_sub q{ {} }); |
e6c7abb4 |
21 | has eight => (is => 'ro', builder => '_build_eight', coerce => sub { $c_ran = 1; $_[0] }); |
22 | sub _build_eight { {} } |
23 | has nine => (is => 'lazy', coerce => sub { $c_ran = 1; $_[0] }); |
24 | sub _build_nine { {} } |
2a894d0c |
25 | has ten => (is => 'lazy', default => 5 ); |
2fa823de |
26 | has eleven => (is => 'ro', default => 5 ); |
27 | has twelve => (is => 'lazy', default => 0 ); |
28 | has thirteen => (is => 'ro', default => 0 ); |
60cc0a5a |
29 | has fourteen => (is => 'ro', required => 1, builder => '_build_fourteen'); |
30 | sub _build_fourteen { {} } |
46389f86 |
31 | } |
32 | |
33 | sub check { |
34 | my ($attr, @h) = @_; |
35 | |
36 | is_deeply($h[$_], {}, "${attr}: empty hashref \$h[$_]") for 0..1; |
37 | |
38 | isnt($h[0],$h[1], "${attr}: not the same hashref"); |
39 | } |
40 | |
41 | check one => map Foo->new->one, 1..2; |
42 | |
43 | check two => map Foo->new->two, 1..2; |
44 | |
649ac264 |
45 | check three => map Foo->new->{three}, 1..2; |
46 | |
47 | check four => map Foo->new->{four}, 1..2; |
48 | |
d02da2bc |
49 | check five => map Foo->new->{five}, 1..2; |
50 | |
e8dc5201 |
51 | check six => map Foo->new->{six}, 1..2; |
52 | |
c9a5dcbd |
53 | check seven => map Foo->new->{seven}, 1..2; |
54 | |
60cc0a5a |
55 | check fourteen => map Foo->new->{fourteen}, 1..2; |
56 | |
e6c7abb4 |
57 | check eight => map Foo->new->{eight}, 1..2; |
58 | ok($c_ran, 'coerce defaults'); |
59 | |
60 | $c_ran = 0; |
61 | |
62 | check nine => map Foo->new->nine, 1..2; |
63 | ok($c_ran, 'coerce lazy default'); |
64 | |
2a894d0c |
65 | is(Foo->new->ten, 5, 'non-ref default'); |
2fa823de |
66 | is(Foo->new->eleven, 5, 'eager non-ref default'); |
67 | is(Foo->new->twelve, 0, 'false non-ref default'); |
68 | is(Foo->new->thirteen, 0, 'eager false non-ref default'); |
2a894d0c |
69 | |
46389f86 |
70 | done_testing; |