More role composition tests
[gitmo/MooseX-ClassAttribute.git] / t / 08-role-composition.t
index 08a3356..1e8d0bb 100644 (file)
 use strict;
 use warnings;
+
 use Test::More;
 
-lives_ok {
-    Bar->new->_connections;
-} 'finds a class attribute under role composition';
+{
+    package Role;
+
+    use Moose::Role;
+    use MooseX::ClassAttribute;
+
+    class_has 'CA' => (
+        is      => 'ro',
+        isa     => 'HashRef',
+        default => sub { {} },
+    );
+}
+
+{
+    package Role2;
+    use Moose::Role;
+}
+
+{
+    package Bar;
+    use Moose;
+
+    with 'Role2', 'Role';
+}
+
+ok(
+    Bar->can('CA'),
+    'Class attributes are preserved during role composition'
+);
+
+{
+    package Role3;
+    use Moose::Role;
+    with 'Role';
+}
+
+{
+    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;
 
-done_testing;
+    class_has 'CA2' => (
+        is      => 'ro',
+        isa     => 'HashRef',
+        default => sub { {} },
+    );
+}
 
-BEGIN {
+{
+    package Buz;
+    use Moose;
 
-package Role;
-use Moose::Role;
-use MooseX::ClassAttribute;
+    with 'Role', 'Role4';
+}
 
-class_has '_connections' => (
-    is => 'ro',
-    isa => 'HashRef',
-    default => sub { {} },
-   );
+ok(
+    Buz->can('CA'),
+    'Class attributes are merged from two roles (CA)'
+);
 
-package Role2;
-use Moose::Role;
+ok(
+    Buz->can('CA2'),
+    'Class attributes are merged from two roles (CA2)'
+);
 
-package Bar;
-use Moose;
+{
+    package Role5;
+    use Moose::Role;
+    with 'Role', 'Role4';
+}
 
-with ('Role2','Role');
+{
+    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();