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