Commit | Line | Data |
fde8e43f |
1 | # See https://rt.cpan.org/Ticket/Display.html?id=46347 |
2 | # This is automatically generated by author/import-moose-test.pl. |
3 | # DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!! |
4 | use t::lib::MooseCompat; |
5 | |
6 | use strict; |
7 | use warnings; |
8 | |
9 | use Test::More; |
10 | use Test::Exception; |
11 | |
12 | { |
13 | package My::Role1; |
14 | use Mouse::Role; |
15 | requires 'test_output'; |
16 | } |
17 | |
18 | { |
19 | package My::Role2; |
20 | use Mouse::Role; |
21 | has test_output => ( is => 'rw' ); |
22 | with 'My::Role1'; |
23 | } |
24 | |
25 | { |
26 | package My::Role3; |
27 | use Mouse::Role; |
28 | sub test_output { } |
29 | with 'My::Role1'; |
30 | } |
31 | |
32 | { |
33 | package My::Role4; |
34 | use Mouse::Role; |
35 | has test_output => ( is => 'rw' ); |
36 | } |
37 | |
38 | { |
39 | package My::Role5; |
40 | use Mouse::Role; |
41 | sub test_output { } |
42 | } |
43 | |
44 | { |
45 | package My::Base1; |
46 | use Mouse; |
47 | has test_output => ( is => 'rw' ); |
48 | } |
49 | |
50 | { |
51 | package My::Base2; |
52 | use Mouse; |
53 | sub test_output { } |
54 | } |
55 | |
56 | # Roles providing attributes/methods should satisfy requires() of other |
57 | # roles they consume. |
58 | { |
59 | local $TODO = "role attributes don't satisfy method requirements"; |
60 | lives_ok { package My::Test1; use Mouse; with 'My::Role2'; } |
61 | 'role2(provides attribute) consumes role1'; |
62 | } |
63 | |
64 | lives_ok { package My::Test2; use Mouse; with 'My::Role3'; } |
65 | 'role3(provides method) consumes role1'; |
66 | |
67 | # As I understand the design, Roles composed in the same with() statement |
68 | # should NOT demonstrate ordering dependency. Alter these tests if that |
69 | # assumption is false. -Vince Veselosky |
70 | { |
71 | local $TODO = "role attributes don't satisfy method requirements"; |
72 | lives_ok { package My::Test3; use Mouse; with 'My::Role4', 'My::Role1'; } |
73 | 'class consumes role4(provides attribute), role1'; |
74 | } |
75 | |
76 | { |
77 | local $TODO = "role attributes don't satisfy method requirements"; |
78 | lives_ok { package My::Test4; use Mouse; with 'My::Role1', 'My::Role4'; } |
79 | 'class consumes role1, role4(provides attribute)'; |
80 | } |
81 | |
82 | lives_ok { package My::Test5; use Mouse; with 'My::Role5', 'My::Role1'; } |
83 | 'class consumes role5(provides method), role1'; |
84 | |
85 | lives_ok { package My::Test6; use Mouse; with 'My::Role1', 'My::Role5'; } |
86 | 'class consumes role1, role5(provides method)'; |
87 | |
88 | # Inherited methods/attributes should satisfy requires(), as long as |
89 | # extends() comes first in code order. |
90 | lives_ok { |
91 | package My::Test7; |
92 | use Mouse; |
93 | extends 'My::Base1'; |
94 | with 'My::Role1'; |
95 | } |
96 | 'class extends base1(provides attribute), consumes role1'; |
97 | |
98 | lives_ok { |
99 | package My::Test8; |
100 | use Mouse; |
101 | extends 'My::Base2'; |
102 | with 'My::Role1'; |
103 | } |
104 | 'class extends base2(provides method), consumes role1'; |
105 | |
106 | # Attributes/methods implemented in class should satisfy requires() |
107 | lives_ok { |
108 | |
109 | package My::Test9; |
110 | use Mouse; |
111 | has 'test_output', is => 'rw'; |
112 | with 'My::Role1'; |
113 | } |
114 | 'class provides attribute, consumes role1'; |
115 | |
116 | lives_ok { |
117 | |
118 | package My::Test10; |
119 | use Mouse; |
120 | sub test_output { } |
121 | with 'My::Role1'; |
122 | } |
123 | 'class provides method, consumes role1'; |
124 | |
125 | # Roles composed in separate with() statements SHOULD demonstrate ordering |
126 | # dependency. See comment with tests 3-6 above. |
127 | lives_ok { |
128 | package My::Test11; |
129 | use Mouse; |
130 | with 'My::Role4'; |
131 | with 'My::Role1'; |
132 | } |
133 | 'class consumes role4(provides attribute); consumes role1'; |
134 | |
135 | dies_ok { package My::Test12; use Mouse; with 'My::Role1'; with 'My::Role4'; } |
136 | 'class consumes role1; consumes role4(provides attribute)'; |
137 | |
138 | lives_ok { |
139 | package My::Test13; |
140 | use Mouse; |
141 | with 'My::Role5'; |
142 | with 'My::Role1'; |
143 | } |
144 | 'class consumes role5(provides method); consumes role1'; |
145 | |
146 | dies_ok { package My::Test14; use Mouse; with 'My::Role1'; with 'My::Role5'; } |
147 | 'class consumes role1; consumes role5(provides method)'; |
148 | |
149 | done_testing; |