More role composition tests
[gitmo/MooseX-ClassAttribute.git] / t / 08-role-composition.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 {
7     package Role;
8
9     use Moose::Role;
10     use MooseX::ClassAttribute;
11
12     class_has 'CA' => (
13         is      => 'ro',
14         isa     => 'HashRef',
15         default => sub { {} },
16     );
17 }
18
19 {
20     package Role2;
21     use Moose::Role;
22 }
23
24 {
25     package Bar;
26     use Moose;
27
28     with 'Role2', 'Role';
29 }
30
31 ok(
32     Bar->can('CA'),
33     'Class attributes are preserved during role composition'
34 );
35
36 {
37     package Role3;
38     use Moose::Role;
39     with 'Role';
40 }
41
42 {
43     package Baz;
44     use Moose;
45
46     with 'Role3';
47 }
48
49 ok(
50     Baz->can('CA'),
51     'Class attributes are preserved when role is applied to another role'
52 );
53
54 {
55     package Role4;
56     use Moose::Role;
57
58     use MooseX::ClassAttribute;
59
60     class_has 'CA2' => (
61         is      => 'ro',
62         isa     => 'HashRef',
63         default => sub { {} },
64     );
65 }
66
67 {
68     package Buz;
69     use Moose;
70
71     with 'Role', 'Role4';
72 }
73
74 ok(
75     Buz->can('CA'),
76     'Class attributes are merged from two roles (CA)'
77 );
78
79 ok(
80     Buz->can('CA2'),
81     'Class attributes are merged from two roles (CA2)'
82 );
83
84 {
85     package Role5;
86     use Moose::Role;
87     with 'Role', 'Role4';
88 }
89
90 {
91     package Quux;
92     use Moose;
93
94     with 'Role5';
95 }
96
97 ok(
98     Quux->can('CA'),
99     'Class attributes are merged from two roles (CA)'
100 );
101
102 ok(
103     Quux->can('CA2'),
104     'Class attributes are merged from two roles (CA2)'
105 );
106
107 done_testing();