More role composition tests
[gitmo/MooseX-ClassAttribute.git] / t / 08-role-composition.t
index 81eeb44..1e8d0bb 100644 (file)
@@ -25,12 +25,83 @@ use Test::More;
     package Bar;
     use Moose;
 
-    with( 'Role2', 'Role' );
+    with 'Role2', 'Role';
+}
+
+ok(
+    Bar->can('CA'),
+    'Class attributes are preserved during role composition'
+);
+
+{
+    package Role3;
+    use Moose::Role;
+    with 'Role';
 }
 
 {
-    local $TODO = 'Class attributes are lost during role composition';
-    can_ok( 'Bar', 'CA', );
+    package Baz;
+    use Moose;
+
+    with 'Role3';
+}
+
+ok(
+    Baz->can('CA'),
+    'Class attributes are preserved when role is applied to another role'
+);
+
+{
+    package Role4;
+    use Moose::Role;
+
+    use MooseX::ClassAttribute;
+
+    class_has 'CA2' => (
+        is      => 'ro',
+        isa     => 'HashRef',
+        default => sub { {} },
+    );
 }
 
+{
+    package Buz;
+    use Moose;
+
+    with 'Role', 'Role4';
+}
+
+ok(
+    Buz->can('CA'),
+    'Class attributes are merged from two roles (CA)'
+);
+
+ok(
+    Buz->can('CA2'),
+    'Class attributes are merged from two roles (CA2)'
+);
+
+{
+    package Role5;
+    use Moose::Role;
+    with 'Role', 'Role4';
+}
+
+{
+    package Quux;
+    use Moose;
+
+    with 'Role5';
+}
+
+ok(
+    Quux->can('CA'),
+    'Class attributes are merged from two roles (CA)'
+);
+
+ok(
+    Quux->can('CA2'),
+    'Class attributes are merged from two roles (CA2)'
+);
+
 done_testing();