Commit | Line | Data |
f2aa2fe5 |
1 | use strict; |
2 | use warnings; |
3272340d |
3 | |
87e80a25 |
4 | use Test::More; |
f2aa2fe5 |
5 | |
87e80a25 |
6 | { |
7 | package Role; |
f2aa2fe5 |
8 | |
87e80a25 |
9 | use Moose::Role; |
10 | use MooseX::ClassAttribute; |
f2aa2fe5 |
11 | |
87e80a25 |
12 | class_has 'CA' => ( |
13 | is => 'ro', |
14 | isa => 'HashRef', |
15 | default => sub { {} }, |
16 | ); |
d7ebfe78 |
17 | |
18 | class_has 'lazy_fail' => ( |
19 | isa => 'Int' |
20 | , is => 'ro' |
21 | , lazy => 1 |
22 | , default => sub { |
23 | my $self = shift; |
24 | $self->life + 42; |
25 | } |
26 | ); |
87e80a25 |
27 | } |
f2aa2fe5 |
28 | |
87e80a25 |
29 | { |
30 | package Role2; |
31 | use Moose::Role; |
32 | } |
f2aa2fe5 |
33 | |
87e80a25 |
34 | { |
35 | package Bar; |
36 | use Moose; |
d7ebfe78 |
37 | use MooseX::ClassAttribute; |
f2aa2fe5 |
38 | |
87e80a25 |
39 | with( 'Role2', 'Role' ); |
d7ebfe78 |
40 | |
41 | class_has 'life' => ( isa => 'Int', is => 'ro', default => 42 ); |
87e80a25 |
42 | } |
f2aa2fe5 |
43 | |
87e80a25 |
44 | { |
45 | local $TODO = 'Class attributes are lost during role composition'; |
46 | can_ok( 'Bar', 'CA', ); |
d7ebfe78 |
47 | my $obj; |
48 | eval { |
49 | $obj = Bar->new; |
50 | }; |
51 | ok( !$@, 'No errors creating object' ); |
52 | is( $obj->life, 42, 'Right value for object' ); |
53 | eval { |
54 | $obj->lazy_fail; |
55 | }; |
56 | ok (!$@, "Calling class attribute declared in role syyucceeded" ); |
57 | |
58 | eval { |
59 | $obj->lazy_fail = 84 ? return : die "Not equal"; |
60 | }; |
61 | ok (!$@, "Lazy class attribute in role was able to utilize non-lazy values in base class" ); |
f2aa2fe5 |
62 | } |
87e80a25 |
63 | |
64 | done_testing(); |