Regenerate test files
[gitmo/Mouse.git] / t / 030_roles / 045_role_compose_requires.t
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;