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