Commit | Line | Data |
f2aa2fe5 |
1 | use strict; |
2 | use warnings; |
3272340d |
3 | |
87e80a25 |
4 | use Test::More; |
f2aa2fe5 |
5 | |
87e80a25 |
6 | { |
7 | package Role; |
f2aa2fe5 |
8 | |
87e80a25 |
9 | use Moose::Role; |
10 | use MooseX::ClassAttribute; |
f2aa2fe5 |
11 | |
87e80a25 |
12 | class_has 'CA' => ( |
13 | is => 'ro', |
14 | isa => 'HashRef', |
15 | default => sub { {} }, |
16 | ); |
17 | } |
f2aa2fe5 |
18 | |
87e80a25 |
19 | { |
20 | package Role2; |
21 | use Moose::Role; |
22 | } |
f2aa2fe5 |
23 | |
87e80a25 |
24 | { |
25 | package Bar; |
26 | use Moose; |
f2aa2fe5 |
27 | |
5a7bfdcc |
28 | with 'Role2', 'Role'; |
87e80a25 |
29 | } |
f2aa2fe5 |
30 | |
289b3466 |
31 | ok( |
32 | Bar->can('CA'), |
33 | 'Class attributes are preserved during role composition' |
34 | ); |
87e80a25 |
35 | |
5a7bfdcc |
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 | |
56a8f20e |
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 | |
87e80a25 |
107 | done_testing(); |