This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
0c715577f15776e1a32947159681f82afb4541a7
[perl5.git] / cpan / Module-Load / t / 02_Module-Load.t
1 #!perl
2
3 use Test::More;
4 use strict;
5
6 #
7 # Module::Load; test new features:
8 #    autoload;
9 #    remote_load
10 #    autload_remote
11 #  and options: '','none',undef,'all','load','autoload','load_remote'
12 #
13 # License: This library is free software; you may redistribute and/or modify it under the same terms as Perl itself.
14 #
15 #  Author (jabber/email) : reisub@yandex.ru
16 #
17
18 my ($afx, $cnt, $r, $tcode) = ('TestXYZ_', 0);
19
20 sub _reset{
21     undef %{Data::Dumper::};
22     undef %{XYZ::Module::};
23     eval "undef %{$afx$cnt::}";
24     delete $INC{'Data/Dumper.pm'};
25 }
26
27 sub _test{
28     $cnt++;
29     $tcode = "package $afx$cnt; my \$WORLD='PEACE';" . join '', @_;
30 #    print "tcode:$tcode\n";
31     $r = eval($tcode) || $@;
32 }
33
34 sub is_peace_in_world{
35     like $r, qr/(WORLD\W+)?PEACE/o, $_[0] || '.';
36     goto &_reset;
37 }
38
39 sub isnt_peace_in_world{
40     unlike $r, qr/(WORLD\W+)?PEACE/o, $_[0] || '.';
41     goto &_reset;
42 }
43
44 sub isnt_def_sub{
45     like $r, qr/Undefined\s+subroutine/io, $_[0] || '.';
46     goto &_reset;
47 }
48
49 sub cant_locate{
50         like $r, qr/Can't\s+locate/io, $_[0] || '.';
51     goto &_reset;
52 }
53
54 subtest 'load/prevcompat' => sub{
55     _test('use Module::Load;
56             load("Data::Dumper");
57             Data::Dumper->Dump([$WORLD]);');
58     is_peace_in_world('default import');
59
60     _test('use Module::Load "load";
61             load("Data::Dumper");
62             Data::Dumper->Dump([$WORLD]);');
63     is_peace_in_world();
64
65     _test('use Module::Load;
66             load("Data::Dumper");
67             Dumper([$WORLD]);');
68     isnt_def_sub();
69
70     _test('use Module::Load;
71             load("Data::Dumper","Dumper");
72             Data::Dumper->Dump([$WORLD]);');
73     is_peace_in_world();
74
75     _test('use Module::Load;
76             load("Data::Dumper","Dumper","DumperX");
77             Data::Dumper->Dump([$WORLD]);');
78     is_peace_in_world();
79
80         _test('use Module::Load "all";
81             load("Data::Dumper","Dumper","DumperX");
82             DumperX([$WORLD]);');
83     is_peace_in_world();
84
85     _test('use Module::Load "all";
86                 load("______");');
87     cant_locate();
88
89     _test('use Module::Load "";
90                         load("Data::Dumper");
91             Data::Dumper->Dump([$WORLD]);');
92     isnt_def_sub();
93
94         _test('use Module::Load "none";
95                         load("Data::Dumper");
96             Data::Dumper->Dump([$WORLD]);');
97     isnt_def_sub();
98
99         _test('use Module::Load undef;
100                         load("Data::Dumper");
101             Data::Dumper->Dump([$WORLD]);');
102     isnt_def_sub();
103
104     done_testing();
105 };
106
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');
112
113     _test('use Module::Load;
114                         Module::Load::autoload("Data::Dumper");
115             Data::Dumper->Dump([$WORLD]);');
116     is_peace_in_world();
117
118     _test('use Module::Load;
119                         Module::Load::autoload("Data::Dumper");
120             Dumper($WORLD);');
121     is_peace_in_world();
122
123     _test('use Module::Load;
124                         Module::Load::autoload("Data::Dumper","Dumper");
125             Dumper($WORLD);');
126     is_peace_in_world();
127
128     _test('use Module::Load;
129                         Module::Load::autoload("Data::Dumper","Dumper","DumperX");
130             DumperX($WORLD);');
131     is_peace_in_world();
132
133     _test('use Module::Load "autoload";
134                         autoload("Data::Dumper");
135             Dumper($WORLD);');
136     is_peace_in_world();
137
138     _test('use Module::Load "all";
139                         autoload("Data::Dumper");
140             Dumper($WORLD);');
141     is_peace_in_world();
142
143     _test('use Module::Load "all";
144                         autoload("Data::Dumper","Dumper","DumperX");
145             DumperX($WORLD);');
146     is_peace_in_world();
147
148     _test('use Module::Load "all";
149                         autoload("______");');
150     cant_locate();
151
152     _test('use Module::Load "";
153                         autoload("Data::Dumper");
154             Data::Dumper->Dump([$WORLD]);');
155     isnt_def_sub();
156
157         _test('use Module::Load "none";
158                         autoload("Data::Dumper");
159             Data::Dumper->Dump([$WORLD]);');
160     isnt_def_sub();
161
162         _test('use Module::Load undef;
163                         autoload("Data::Dumper");
164             Data::Dumper->Dump([$WORLD]);');
165     isnt_def_sub();
166
167     done_testing();
168 };
169
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]);');
175                 isnt_def_sub();
176
177                 _test('use Module::Load '.$asq.';
178                                 autoload("Data::Dumper");
179                                 Data::Dumper->Dump([$WORLD]);');
180                 isnt_def_sub();
181
182                 _test('use Module::Load '.$asq.';
183                                 load_remote("XYZ::Module" => "Data::Dumper");
184                                 Data::Dumper->Dump([$WORLD]);');
185                 isnt_def_sub();
186
187                 _test('use Module::Load '.$asq.';
188                                 autoload_remote("XYZ::Module" => "Data::Dumper");
189                                 Data::Dumper->Dump([$WORLD]);');
190                 isnt_def_sub();
191     }
192     done_testing();
193 };
194
195 subtest 'load_remote' => sub{
196     _test('use Module::Load;
197             load_remote("XYZ::Module","Data::Dumper");
198             Data::Dumper->Dump([$WORLD]);');
199     isnt_def_sub();
200
201     _test('use Module::Load;
202             load_remote("XYZ::Module","Data::Dumper");
203             Dumper([$WORLD]);');
204     isnt_def_sub();
205
206     _test('use Module::Load;
207             Module::Load::load_remote("XYZ::Module","Data::Dumper");
208             Data::Dumper->Dump([$WORLD]);');
209     is_peace_in_world();
210
211     _test('use Module::Load;
212             Module::Load::load_remote("XYZ::Module","Data::Dumper");
213             XYZ::Module::Dumper($WORLD);');
214     isnt_def_sub();
215
216     _test('use Module::Load;
217             Module::Load::load_remote("XYZ::Module","Data::Dumper","Dumper");
218             XYZ::Module::Dumper($WORLD);');
219     is_peace_in_world();
220
221     _test('use Module::Load;
222             Module::Load::load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
223             XYZ::Module::Dumper($WORLD);');
224     is_peace_in_world();
225
226     _test('use Module::Load "load_remote";
227             load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
228             XYZ::Module::Dumper($WORLD);');
229     is_peace_in_world();
230
231     _test('use Module::Load "all";
232             load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
233             XYZ::Module::Dumper($WORLD);');
234     is_peace_in_world();
235
236         _test('use Module::Load "all";
237             load_remote("XYZ::Module","______","Data::Dumper");
238             XYZ::Module::Dumper($WORLD);');
239     cant_locate();
240 };
241
242 subtest 'autoload_remote' => sub{
243     _test('use Module::Load;
244             autoload_remote("XYZ::Module","Data::Dumper");
245             Data::Dumper->Dump([$WORLD]);');
246     isnt_def_sub();
247
248     _test('use Module::Load;
249             autoload_remote("XYZ::Module","Data::Dumper");
250             Dumper([$WORLD]);');
251     isnt_def_sub();
252
253     _test('use Module::Load;
254             Module::Load::autoload_remote("XYZ::Module","Data::Dumper");
255             Data::Dumper->Dump([$WORLD]);');
256     is_peace_in_world();
257
258     _test('use Module::Load;
259             Module::Load::autoload_remote("XYZ::Module","Data::Dumper");
260             XYZ::Module::Dumper($WORLD);');
261     is_peace_in_world();
262
263     _test('use Module::Load;
264             Module::Load::autoload_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
265             XYZ::Module::DumperX($WORLD);');
266     is_peace_in_world();
267
268     _test('use Module::Load "autoload_remote";
269             autoload_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
270             XYZ::Module::Dumper($WORLD);');
271     is_peace_in_world();
272
273     _test('use Module::Load "all";
274             autoload_remote("XYZ::Module","______","Data::Dumper");
275             XYZ::Module::Dumper($WORLD);');
276     cant_locate();
277
278         done_testing();
279 };
280
281 subtest 'complex' => sub{
282         _test('use Module::Load "load","autoload","none";
283                         load("Data::Dumper");
284             Data::Dumper->Dump([$WORLD]);');
285     isnt_def_sub();
286
287         _test('use Module::Load "load","autoload","none";
288                         autoload("Data::Dumper");
289             Data::Dumper->Dump([$WORLD]);');
290     isnt_def_sub();
291
292         _test('use Module::Load "load","autoload","none";
293                         load_remote("Data::Dumper");
294             Data::Dumper->Dump([$WORLD]);');
295     isnt_def_sub();
296
297         _test('use Module::Load "load","autoload","none";
298                         autoload_remote("Data::Dumper");
299             Data::Dumper->Dump([$WORLD]);');
300     isnt_def_sub();
301
302
303         _test('use Module::Load "load","autoload";
304                         load("Data::Dumper", "Dumper");
305                         autoload("Carp");
306             croak( Dumper([$WORLD]) );');
307     is_peace_in_world();
308
309         _test('use Module::Load "load","autoload";
310                         load_remote("Data::Dumper");');
311     isnt_def_sub();
312
313         _test('use Module::Load "load","autoload";
314                         autoload_remote("Data::Dumper");');
315     isnt_def_sub();
316
317         _test('use Module::Load "load","autoload","none";
318                         autoload_remote("Data::Dumper");
319             Data::Dumper->Dump([$WORLD]);');
320     isnt_def_sub();
321
322         _test('use Module::Load "load","autoload","load_remote","autoload_remote";
323                         load("Carp");
324                         autoload("Data::Dumper");
325                         load_remote("XYZ::Module", "Carp");
326                         autoload_remote("XYZ::Module", "Carp");
327             Dumper([$WORLD]);');
328     is_peace_in_world();
329
330         _test('use Module::Load "all";
331                         load("Carp");
332                         autoload("Data::Dumper");
333                         load_remote("XYZ::Module" => "Carp");
334                         autoload_remote("XYZ::Module" => "Carp");
335             Dumper([$WORLD]);');
336     is_peace_in_world();
337
338         _test('use Module::Load "all","";
339                         load("Carp");');
340     isnt_def_sub();
341
342     done_testing();
343 };
344
345 done_testing();
346