also need to remove methods from the map when it's invalidated
[gitmo/Class-MOP.git] / t / 016_class_errors_and_edge_cases.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Fatal;
6
7 use Class::MOP;
8
9 {
10     isnt( exception {
11         Class::MOP::Class->initialize();
12     }, undef, '... initialize requires a name parameter' );
13
14     isnt( exception {
15         Class::MOP::Class->initialize('');
16     }, undef, '... initialize requires a name valid parameter' );
17
18     isnt( exception {
19         Class::MOP::Class->initialize(bless {} => 'Foo');
20     }, undef, '... initialize requires an unblessed parameter' );
21 }
22
23 {
24     isnt( exception {
25         Class::MOP::Class->_construct_class_instance();
26     }, undef, '... _construct_class_instance requires an :package parameter' );
27
28     isnt( exception {
29         Class::MOP::Class->_construct_class_instance(':package' => undef);
30     }, undef, '... _construct_class_instance requires a defined :package parameter' );
31
32     isnt( exception {
33         Class::MOP::Class->_construct_class_instance(':package' => '');
34     }, undef, '... _construct_class_instance requires a valid :package parameter' );
35 }
36
37
38 {
39     isnt( exception {
40         Class::MOP::Class->create();
41     }, undef, '... create requires an package_name parameter' );
42
43     isnt( exception {
44         Class::MOP::Class->create(undef);
45     }, undef, '... create requires a defined package_name parameter' );
46
47     isnt( exception {
48         Class::MOP::Class->create('');
49     }, undef, '... create requires a valid package_name parameter' );
50
51     like( exception {
52         Class::MOP::Class->create('+++');
53     }, qr/^creation of \+\+\+ failed/, '... create requires a valid package_name parameter' );
54
55 }
56
57 {
58     isnt( exception {
59         Class::MOP::Class->clone_object(1);
60     }, undef, '... can only clone instances' );
61 }
62
63 {
64     isnt( exception {
65         Class::MOP::Class->add_method();
66     }, undef, '... add_method dies as expected' );
67
68     isnt( exception {
69         Class::MOP::Class->add_method('');
70     }, undef, '... add_method dies as expected' );
71
72     isnt( exception {
73         Class::MOP::Class->add_method('foo' => 'foo');
74     }, undef, '... add_method dies as expected' );
75
76     isnt( exception {
77         Class::MOP::Class->add_method('foo' => []);
78     }, undef, '... add_method dies as expected' );
79 }
80
81 {
82     isnt( exception {
83         Class::MOP::Class->has_method();
84     }, undef, '... has_method dies as expected' );
85
86     isnt( exception {
87         Class::MOP::Class->has_method('');
88     }, undef, '... has_method dies as expected' );
89 }
90
91 {
92     isnt( exception {
93         Class::MOP::Class->get_method();
94     }, undef, '... get_method dies as expected' );
95
96     isnt( exception {
97         Class::MOP::Class->get_method('');
98     }, undef, '... get_method dies as expected' );
99 }
100
101 {
102     isnt( exception {
103         Class::MOP::Class->remove_method();
104     }, undef, '... remove_method dies as expected' );
105
106     isnt( exception {
107         Class::MOP::Class->remove_method('');
108     }, undef, '... remove_method dies as expected' );
109 }
110
111 {
112     isnt( exception {
113         Class::MOP::Class->find_all_methods_by_name();
114     }, undef, '... find_all_methods_by_name dies as expected' );
115
116     isnt( exception {
117         Class::MOP::Class->find_all_methods_by_name('');
118     }, undef, '... find_all_methods_by_name dies as expected' );
119 }
120
121 {
122     isnt( exception {
123         Class::MOP::Class->add_attribute(bless {} => 'Foo');
124     }, undef, '... add_attribute dies as expected' );
125 }
126
127
128 {
129     isnt( exception {
130         Class::MOP::Class->has_attribute();
131     }, undef, '... has_attribute dies as expected' );
132
133     isnt( exception {
134         Class::MOP::Class->has_attribute('');
135     }, undef, '... has_attribute dies as expected' );
136 }
137
138 {
139     isnt( exception {
140         Class::MOP::Class->get_attribute();
141     }, undef, '... get_attribute dies as expected' );
142
143     isnt( exception {
144         Class::MOP::Class->get_attribute('');
145     }, undef, '... get_attribute dies as expected' );
146 }
147
148 {
149     isnt( exception {
150         Class::MOP::Class->remove_attribute();
151     }, undef, '... remove_attribute dies as expected' );
152
153     isnt( exception {
154         Class::MOP::Class->remove_attribute('');
155     }, undef, '... remove_attribute dies as expected' );
156 }
157
158 {
159     isnt( exception {
160         Class::MOP::Class->add_package_symbol();
161     }, undef, '... add_package_symbol dies as expected' );
162
163     isnt( exception {
164         Class::MOP::Class->add_package_symbol('');
165     }, undef, '... add_package_symbol dies as expected' );
166
167     isnt( exception {
168         Class::MOP::Class->add_package_symbol('foo');
169     }, undef, '... add_package_symbol dies as expected' );
170
171     isnt( exception {
172         Class::MOP::Class->add_package_symbol('&foo');
173     }, undef, '... add_package_symbol dies as expected' );
174
175 #    throws_ok {
176 #        Class::MOP::Class->meta->add_package_symbol('@-');
177 #    } qr/^Could not create package variable \(\@\-\) because/,
178 #      '... add_package_symbol dies as expected';
179 }
180
181 {
182     isnt( exception {
183         Class::MOP::Class->has_package_symbol();
184     }, undef, '... has_package_symbol dies as expected' );
185
186     isnt( exception {
187         Class::MOP::Class->has_package_symbol('');
188     }, undef, '... has_package_symbol dies as expected' );
189
190     isnt( exception {
191         Class::MOP::Class->has_package_symbol('foo');
192     }, undef, '... has_package_symbol dies as expected' );
193 }
194
195 {
196     isnt( exception {
197         Class::MOP::Class->get_package_symbol();
198     }, undef, '... get_package_symbol dies as expected' );
199
200     isnt( exception {
201         Class::MOP::Class->get_package_symbol('');
202     }, undef, '... get_package_symbol dies as expected' );
203
204     isnt( exception {
205         Class::MOP::Class->get_package_symbol('foo');
206     }, undef, '... get_package_symbol dies as expected' );
207 }
208
209 {
210     isnt( exception {
211         Class::MOP::Class->remove_package_symbol();
212     }, undef, '... remove_package_symbol dies as expected' );
213
214     isnt( exception {
215         Class::MOP::Class->remove_package_symbol('');
216     }, undef, '... remove_package_symbol dies as expected' );
217
218     isnt( exception {
219         Class::MOP::Class->remove_package_symbol('foo');
220     }, undef, '... remove_package_symbol dies as expected' );
221 }
222
223 done_testing;