Regenerate test files
[gitmo/Mouse.git] / t / 030_roles / 045_role_compose_requires.t
CommitLineData
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!!!
4use t::lib::MooseCompat;
5
6use strict;
7use warnings;
8
9use Test::More;
10use 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
64lives_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
82lives_ok { package My::Test5; use Mouse; with 'My::Role5', 'My::Role1'; }
83'class consumes role5(provides method), role1';
84
85lives_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.
90lives_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
98lives_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()
107lives_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
116lives_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.
127lives_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
135dies_ok { package My::Test12; use Mouse; with 'My::Role1'; with 'My::Role4'; }
136'class consumes role1; consumes role4(provides attribute)';
137
138lives_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
146dies_ok { package My::Test14; use Mouse; with 'My::Role1'; with 'My::Role5'; }
147'class consumes role1; consumes role5(provides method)';
148
149done_testing;