moose 1.21 and 1.9 compatible
[gitmo/MooseX-ClassAttribute.git] / t / 08-role-composition.t
index 08a3356..f4b7f36 100644 (file)
@@ -1,31 +1,64 @@
 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();