added test from #62467
[gitmo/MooseX-ClassAttribute.git] / t / 08-role-composition.t
CommitLineData
f2aa2fe5 1use strict;
2use warnings;
3272340d 3
87e80a25 4use 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
64done_testing();