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