7 # Module::Load; test new features:
11 # and options: '','none',undef,'all','load','autoload','load_remote'
13 # License: This library is free software; you may redistribute and/or modify it under the same terms as Perl itself.
15 # Author (jabber/email) : reisub@yandex.ru
18 my ($afx, $cnt, $r, $tcode) = ('TestXYZ_', 0);
21 undef %{Data::Dumper::};
22 undef %{XYZ::Module::};
23 eval "undef %{$afx$cnt::}";
24 delete $INC{'Data/Dumper.pm'};
29 $tcode = "package $afx$cnt; my \$WORLD='PEACE';" . join '', @_;
30 # print "tcode:$tcode\n";
31 $r = eval($tcode) || $@;
34 sub is_peace_in_world{
35 like $r, qr/(WORLD\W+)?PEACE/o, $_[0] || '.';
39 sub isnt_peace_in_world{
40 unlike $r, qr/(WORLD\W+)?PEACE/o, $_[0] || '.';
45 like $r, qr/Undefined\s+subroutine/io, $_[0] || '.';
50 like $r, qr/Can't\s+locate/io, $_[0] || '.';
54 subtest 'load/prevcompat' => sub{
55 _test('use Module::Load;
57 Data::Dumper->Dump([$WORLD]);');
58 is_peace_in_world('default import');
60 _test('use Module::Load "load";
62 Data::Dumper->Dump([$WORLD]);');
65 _test('use Module::Load;
70 _test('use Module::Load;
71 load("Data::Dumper","Dumper");
72 Data::Dumper->Dump([$WORLD]);');
75 _test('use Module::Load;
76 load("Data::Dumper","Dumper","DumperX");
77 Data::Dumper->Dump([$WORLD]);');
80 _test('use Module::Load "all";
81 load("Data::Dumper","Dumper","DumperX");
85 _test('use Module::Load "all";
89 _test('use Module::Load "";
91 Data::Dumper->Dump([$WORLD]);');
94 _test('use Module::Load "none";
96 Data::Dumper->Dump([$WORLD]);');
99 _test('use Module::Load undef;
100 load("Data::Dumper");
101 Data::Dumper->Dump([$WORLD]);');
107 subtest 'autoload' => sub{
108 _test('use Module::Load;
109 autoload("Data::Dumper");
110 Data::Dumper->Dump([$WORLD]);');
111 is_peace_in_world('default import');
113 _test('use Module::Load;
114 Module::Load::autoload("Data::Dumper");
115 Data::Dumper->Dump([$WORLD]);');
118 _test('use Module::Load;
119 Module::Load::autoload("Data::Dumper");
123 _test('use Module::Load;
124 Module::Load::autoload("Data::Dumper","Dumper");
128 _test('use Module::Load;
129 Module::Load::autoload("Data::Dumper","Dumper","DumperX");
133 _test('use Module::Load "autoload";
134 autoload("Data::Dumper");
138 _test('use Module::Load "all";
139 autoload("Data::Dumper");
143 _test('use Module::Load "all";
144 autoload("Data::Dumper","Dumper","DumperX");
148 _test('use Module::Load "all";
149 autoload("______");');
152 _test('use Module::Load "";
153 autoload("Data::Dumper");
154 Data::Dumper->Dump([$WORLD]);');
157 _test('use Module::Load "none";
158 autoload("Data::Dumper");
159 Data::Dumper->Dump([$WORLD]);');
162 _test('use Module::Load undef;
163 autoload("Data::Dumper");
164 Data::Dumper->Dump([$WORLD]);');
170 subtest 'noimport' => sub{
171 for my $asq('"none"', '""', 'undef'){
172 _test('use Module::Load '.$asq.';
173 load("Data::Dumper");
174 Data::Dumper->Dump([$WORLD]);');
177 _test('use Module::Load '.$asq.';
178 autoload("Data::Dumper");
179 Data::Dumper->Dump([$WORLD]);');
182 _test('use Module::Load '.$asq.';
183 load_remote("XYZ::Module" => "Data::Dumper");
184 Data::Dumper->Dump([$WORLD]);');
187 _test('use Module::Load '.$asq.';
188 autoload_remote("XYZ::Module" => "Data::Dumper");
189 Data::Dumper->Dump([$WORLD]);');
195 subtest 'load_remote' => sub{
196 _test('use Module::Load;
197 load_remote("XYZ::Module","Data::Dumper");
198 Data::Dumper->Dump([$WORLD]);');
201 _test('use Module::Load;
202 load_remote("XYZ::Module","Data::Dumper");
206 _test('use Module::Load;
207 Module::Load::load_remote("XYZ::Module","Data::Dumper");
208 Data::Dumper->Dump([$WORLD]);');
211 _test('use Module::Load;
212 Module::Load::load_remote("XYZ::Module","Data::Dumper");
213 XYZ::Module::Dumper($WORLD);');
216 _test('use Module::Load;
217 Module::Load::load_remote("XYZ::Module","Data::Dumper","Dumper");
218 XYZ::Module::Dumper($WORLD);');
221 _test('use Module::Load;
222 Module::Load::load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
223 XYZ::Module::Dumper($WORLD);');
226 _test('use Module::Load "load_remote";
227 load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
228 XYZ::Module::Dumper($WORLD);');
231 _test('use Module::Load "all";
232 load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
233 XYZ::Module::Dumper($WORLD);');
236 _test('use Module::Load "all";
237 load_remote("XYZ::Module","______","Data::Dumper");
238 XYZ::Module::Dumper($WORLD);');
242 subtest 'autoload_remote' => sub{
243 _test('use Module::Load;
244 autoload_remote("XYZ::Module","Data::Dumper");
245 Data::Dumper->Dump([$WORLD]);');
248 _test('use Module::Load;
249 autoload_remote("XYZ::Module","Data::Dumper");
253 _test('use Module::Load;
254 Module::Load::autoload_remote("XYZ::Module","Data::Dumper");
255 Data::Dumper->Dump([$WORLD]);');
258 _test('use Module::Load;
259 Module::Load::autoload_remote("XYZ::Module","Data::Dumper");
260 XYZ::Module::Dumper($WORLD);');
263 _test('use Module::Load;
264 Module::Load::autoload_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
265 XYZ::Module::DumperX($WORLD);');
268 _test('use Module::Load "autoload_remote";
269 autoload_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
270 XYZ::Module::Dumper($WORLD);');
273 _test('use Module::Load "all";
274 autoload_remote("XYZ::Module","______","Data::Dumper");
275 XYZ::Module::Dumper($WORLD);');
281 subtest 'complex' => sub{
282 _test('use Module::Load "load","autoload","none";
283 load("Data::Dumper");
284 Data::Dumper->Dump([$WORLD]);');
287 _test('use Module::Load "load","autoload","none";
288 autoload("Data::Dumper");
289 Data::Dumper->Dump([$WORLD]);');
292 _test('use Module::Load "load","autoload","none";
293 load_remote("Data::Dumper");
294 Data::Dumper->Dump([$WORLD]);');
297 _test('use Module::Load "load","autoload","none";
298 autoload_remote("Data::Dumper");
299 Data::Dumper->Dump([$WORLD]);');
303 _test('use Module::Load "load","autoload";
304 load("Data::Dumper", "Dumper");
306 croak( Dumper([$WORLD]) );');
309 _test('use Module::Load "load","autoload";
310 load_remote("Data::Dumper");');
313 _test('use Module::Load "load","autoload";
314 autoload_remote("Data::Dumper");');
317 _test('use Module::Load "load","autoload","none";
318 autoload_remote("Data::Dumper");
319 Data::Dumper->Dump([$WORLD]);');
322 _test('use Module::Load "load","autoload","load_remote","autoload_remote";
324 autoload("Data::Dumper");
325 load_remote("XYZ::Module", "Carp");
326 autoload_remote("XYZ::Module", "Carp");
330 _test('use Module::Load "all";
332 autoload("Data::Dumper");
333 load_remote("XYZ::Module" => "Carp");
334 autoload_remote("XYZ::Module" => "Carp");
338 _test('use Module::Load "all","";