f4b7f36ee821c1c09bb4af3dc70f15a569b46a8f
[gitmo/MooseX-ClassAttribute.git] / t / 08-role-composition.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 {
7     package Role;
8
9     use Moose::Role;
10     use MooseX::ClassAttribute;
11
12     class_has 'CA' => (
13         is      => 'ro',
14         isa     => 'HashRef',
15         default => sub { {} },
16     );
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         );
27 }
28
29 {
30     package Role2;
31     use Moose::Role;
32 }
33
34 {
35     package Bar;
36     use Moose;
37         use MooseX::ClassAttribute;
38
39     with( 'Role2', 'Role' );
40         
41         class_has 'life' => ( isa => 'Int', is => 'ro', default => 42 );
42 }
43
44 {
45     local $TODO = 'Class attributes are lost during role composition';
46     can_ok( 'Bar', 'CA', );
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" );
62 }
63
64 done_testing();