use strict;
use warnings;
+
use Test::More;
-lives_ok {
- Bar->new->_connections;
-} 'finds a class attribute under role composition';
+{
+ package Role;
-done_testing;
+ use Moose::Role;
+ use MooseX::ClassAttribute;
-BEGIN {
+ class_has 'CA' => (
+ is => 'ro',
+ isa => 'HashRef',
+ default => sub { {} },
+ );
-package Role;
-use Moose::Role;
-use MooseX::ClassAttribute;
+ class_has 'lazy_fail' => (
+ isa => 'Int'
+ , is => 'ro'
+ , lazy => 1
+ , default => sub {
+ my $self = shift;
+ $self->life + 42;
+ }
+ );
+}
-class_has '_connections' => (
- is => 'ro',
- isa => 'HashRef',
- default => sub { {} },
- );
+{
+ package Role2;
+ use Moose::Role;
+}
-package Role2;
-use Moose::Role;
+{
+ package Bar;
+ use Moose;
+ use MooseX::ClassAttribute;
-package Bar;
-use Moose;
+ with( 'Role2', 'Role' );
+
+ class_has 'life' => ( isa => 'Int', is => 'ro', default => 42 );
+}
-with ('Role2','Role');
+{
+ local $TODO = 'Class attributes are lost during role composition';
+ can_ok( 'Bar', 'CA', );
+ my $obj;
+ eval {
+ $obj = Bar->new;
+ };
+ ok( !$@, 'No errors creating object' );
+ is( $obj->life, 42, 'Right value for object' );
+ eval {
+ $obj->lazy_fail;
+ };
+ ok (!$@, "Calling class attribute declared in role syyucceeded" );
+ eval {
+ $obj->lazy_fail = 84 ? return : die "Not equal";
+ };
+ ok (!$@, "Lazy class attribute in role was able to utilize non-lazy values in base class" );
}
+
+done_testing();