Allow metaclasses to be reinitialized from an existing metaclass, instead of only...
[gitmo/Class-MOP.git] / t / 016_class_errors_and_edge_cases.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 43;
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
63 {
64     dies_ok {
65         Class::MOP::Class->add_method();
66     } '... add_method dies as expected';
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('foo' => 'foo');
74     } '... add_method dies as expected';
75     
76     dies_ok {
77         Class::MOP::Class->add_method('foo' => []);
78     } '... add_method dies as expected';     
79 }
80
81 {
82     dies_ok {
83         Class::MOP::Class->has_method();
84     } '... has_method dies as expected';
85     
86     dies_ok {
87         Class::MOP::Class->has_method('');
88     } '... has_method dies as expected';
89 }
90
91 {
92     dies_ok {
93         Class::MOP::Class->get_method();
94     } '... get_method dies as expected';
95     
96     dies_ok {
97         Class::MOP::Class->get_method('');
98     } '... get_method dies as expected';
99 }
100
101 {
102     dies_ok {
103         Class::MOP::Class->remove_method();
104     } '... remove_method dies as expected';
105     
106     dies_ok {
107         Class::MOP::Class->remove_method('');
108     } '... remove_method dies as expected';
109 }
110
111 {
112     dies_ok {
113         Class::MOP::Class->find_all_methods_by_name();
114     } '... find_all_methods_by_name dies as expected';
115     
116     dies_ok {
117         Class::MOP::Class->find_all_methods_by_name('');
118     } '... find_all_methods_by_name dies as expected';
119 }
120
121 {
122     dies_ok {
123         Class::MOP::Class->add_attribute(bless {} => 'Foo');
124     } '... add_attribute dies as expected';
125 }
126
127
128 {
129     dies_ok {
130         Class::MOP::Class->has_attribute();
131     } '... has_attribute dies as expected';
132     
133     dies_ok {
134         Class::MOP::Class->has_attribute('');
135     } '... has_attribute dies as expected';
136 }
137
138 {
139     dies_ok {
140         Class::MOP::Class->get_attribute();
141     } '... get_attribute dies as expected';
142     
143     dies_ok {
144         Class::MOP::Class->get_attribute('');
145     } '... get_attribute dies as expected';
146 }
147
148 {
149     dies_ok {
150         Class::MOP::Class->remove_attribute();
151     } '... remove_attribute dies as expected';
152     
153     dies_ok {
154         Class::MOP::Class->remove_attribute('');
155     } '... remove_attribute dies as expected';
156 }
157
158 {
159     dies_ok {
160         Class::MOP::Class->add_package_symbol();
161     } '... add_package_symbol dies as expected';
162     
163     dies_ok {
164         Class::MOP::Class->add_package_symbol('');
165     } '... add_package_symbol dies as expected';
166     
167     dies_ok {
168         Class::MOP::Class->add_package_symbol('foo');
169     } '... add_package_symbol dies as expected';  
170     
171     dies_ok {
172         Class::MOP::Class->add_package_symbol('&foo');
173     } '... 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     dies_ok {
183         Class::MOP::Class->has_package_symbol();
184     } '... has_package_symbol dies as expected';
185
186     dies_ok {
187         Class::MOP::Class->has_package_symbol('');
188     } '... has_package_symbol dies as expected';
189
190     dies_ok {
191         Class::MOP::Class->has_package_symbol('foo');
192     } '... has_package_symbol dies as expected';  
193 }
194
195 {
196     dies_ok {
197         Class::MOP::Class->get_package_symbol();
198     } '... get_package_symbol dies as expected';
199
200     dies_ok {
201         Class::MOP::Class->get_package_symbol('');
202     } '... get_package_symbol dies as expected';
203
204     dies_ok {
205         Class::MOP::Class->get_package_symbol('foo');
206     } '... get_package_symbol dies as expected';   
207 }
208
209 {
210     dies_ok {
211         Class::MOP::Class->remove_package_symbol();
212     } '... remove_package_symbol dies as expected';
213
214     dies_ok {
215         Class::MOP::Class->remove_package_symbol('');
216     } '... remove_package_symbol dies as expected';
217
218     dies_ok {
219         Class::MOP::Class->remove_package_symbol('foo');
220     } '... remove_package_symbol dies as expected';  
221 }
222