xref: /openbsd-src/gnu/usr.bin/perl/cpan/Module-Load/t/02_Module-Load.t (revision 256a93a44f36679bee503f12e49566c2183f6181)
16fb12b70Safresh1#!perl
26fb12b70Safresh1
36fb12b70Safresh1use strict;
46fb12b70Safresh1use warnings;
5*256a93a4Safresh1
6*256a93a4Safresh1use Test::More;
76fb12b70Safresh1use Config;
86fb12b70Safresh1
96fb12b70Safresh1#
106fb12b70Safresh1# Module::Load; test new features:
116fb12b70Safresh1#    autoload;
126fb12b70Safresh1#    remote_load
136fb12b70Safresh1#    autload_remote
146fb12b70Safresh1#  and options: '','none',undef,'all','load','autoload','load_remote'
156fb12b70Safresh1#
166fb12b70Safresh1# License: This library is free software; you may redistribute and/or modify it under the same terms as Perl itself.
176fb12b70Safresh1#
186fb12b70Safresh1#  Author (jabber/email) : reisub@yandex.ru
196fb12b70Safresh1#
206fb12b70Safresh1
216fb12b70Safresh1my ($afx, $cnt, $r, $tcode) = ('TestXYZ_', 0);
226fb12b70Safresh1
236fb12b70Safresh1sub _reset{
246fb12b70Safresh1    undef %{Data::Dumper::};
256fb12b70Safresh1    undef %{XYZ::Module::};
266fb12b70Safresh1    no warnings q[uninitialized];
276fb12b70Safresh1    eval "undef %{$afx$cnt::}";
286fb12b70Safresh1    delete $INC{'Data/Dumper.pm'};
296fb12b70Safresh1}
306fb12b70Safresh1
316fb12b70Safresh1sub _test{
326fb12b70Safresh1    $cnt++;
336fb12b70Safresh1    $tcode = "package $afx$cnt; my \$WORLD='PEACE';" . join '', @_;
346fb12b70Safresh1#    print "tcode:$tcode\n";
356fb12b70Safresh1    $r = eval($tcode) || $@;
366fb12b70Safresh1}
376fb12b70Safresh1
386fb12b70Safresh1sub is_peace_in_world{
396fb12b70Safresh1    like $r, qr/(WORLD\W+)?PEACE/o, $_[0] || '.';
406fb12b70Safresh1    goto &_reset;
416fb12b70Safresh1}
426fb12b70Safresh1
436fb12b70Safresh1sub isnt_peace_in_world{
446fb12b70Safresh1    unlike $r, qr/(WORLD\W+)?PEACE/o, $_[0] || '.';
456fb12b70Safresh1    goto &_reset;
466fb12b70Safresh1}
476fb12b70Safresh1
486fb12b70Safresh1sub isnt_def_sub{
496fb12b70Safresh1    like $r, qr/Undefined\s+subroutine/io, $_[0] || '.';
506fb12b70Safresh1    goto &_reset;
516fb12b70Safresh1}
526fb12b70Safresh1
536fb12b70Safresh1sub cant_locate{
546fb12b70Safresh1	like $r, qr/Can't\s+locate/io, $_[0] || '.';
556fb12b70Safresh1    goto &_reset;
566fb12b70Safresh1}
576fb12b70Safresh1
586fb12b70Safresh1subtest 'load/prevcompat' => sub{
596fb12b70Safresh1    _test('use Module::Load;
606fb12b70Safresh1	    load("Data::Dumper");
616fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
626fb12b70Safresh1    is_peace_in_world('default import');
636fb12b70Safresh1
646fb12b70Safresh1    _test('use Module::Load "load";
656fb12b70Safresh1	    load("Data::Dumper");
666fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
676fb12b70Safresh1    is_peace_in_world();
686fb12b70Safresh1
696fb12b70Safresh1    _test('use Module::Load;
706fb12b70Safresh1	    load("Data::Dumper");
716fb12b70Safresh1    	    Dumper([$WORLD]);');
726fb12b70Safresh1    isnt_def_sub();
736fb12b70Safresh1
746fb12b70Safresh1    _test('use Module::Load;
756fb12b70Safresh1	    load("Data::Dumper","Dumper");
766fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
776fb12b70Safresh1    is_peace_in_world();
786fb12b70Safresh1
796fb12b70Safresh1    _test('use Module::Load "all";
806fb12b70Safresh1		load("______");');
816fb12b70Safresh1    cant_locate();
826fb12b70Safresh1
836fb12b70Safresh1    _test('use Module::Load "";
846fb12b70Safresh1			load("Data::Dumper");
856fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
866fb12b70Safresh1    isnt_def_sub();
876fb12b70Safresh1
886fb12b70Safresh1	_test('use Module::Load "none";
896fb12b70Safresh1			load("Data::Dumper");
906fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
916fb12b70Safresh1    isnt_def_sub();
926fb12b70Safresh1
936fb12b70Safresh1	_test('use Module::Load undef;
946fb12b70Safresh1			load("Data::Dumper");
956fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
966fb12b70Safresh1    isnt_def_sub();
976fb12b70Safresh1
986fb12b70Safresh1    done_testing();
996fb12b70Safresh1};
1006fb12b70Safresh1
1016fb12b70Safresh1subtest 'autoload' => sub{
1026fb12b70Safresh1    _test('use Module::Load;
1036fb12b70Safresh1			autoload("Data::Dumper");
1046fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
1056fb12b70Safresh1    is_peace_in_world('default import');
1066fb12b70Safresh1
1076fb12b70Safresh1    _test('use Module::Load;
1086fb12b70Safresh1			Module::Load::autoload("Data::Dumper");
1096fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
1106fb12b70Safresh1    is_peace_in_world();
1116fb12b70Safresh1
1126fb12b70Safresh1    _test('use Module::Load;
1136fb12b70Safresh1			Module::Load::autoload("Data::Dumper");
1146fb12b70Safresh1    	    Dumper($WORLD);');
1156fb12b70Safresh1    is_peace_in_world();
1166fb12b70Safresh1
1176fb12b70Safresh1    _test('use Module::Load;
1186fb12b70Safresh1			Module::Load::autoload("Data::Dumper","Dumper");
1196fb12b70Safresh1    	    Dumper($WORLD);');
1206fb12b70Safresh1    is_peace_in_world();
1216fb12b70Safresh1
1226fb12b70Safresh1    _test('use Module::Load "autoload";
1236fb12b70Safresh1			autoload("Data::Dumper");
1246fb12b70Safresh1    	    Dumper($WORLD);');
1256fb12b70Safresh1    is_peace_in_world();
1266fb12b70Safresh1
1276fb12b70Safresh1    _test('use Module::Load "all";
1286fb12b70Safresh1			autoload("Data::Dumper");
1296fb12b70Safresh1    	    Dumper($WORLD);');
1306fb12b70Safresh1    is_peace_in_world();
1316fb12b70Safresh1
1326fb12b70Safresh1    _test('use Module::Load "all";
1336fb12b70Safresh1			autoload("______");');
1346fb12b70Safresh1    cant_locate();
1356fb12b70Safresh1
1366fb12b70Safresh1    _test('use Module::Load "";
1376fb12b70Safresh1			autoload("Data::Dumper");
1386fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
1396fb12b70Safresh1    isnt_def_sub();
1406fb12b70Safresh1
1416fb12b70Safresh1	_test('use Module::Load "none";
1426fb12b70Safresh1			autoload("Data::Dumper");
1436fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
1446fb12b70Safresh1    isnt_def_sub();
1456fb12b70Safresh1
1466fb12b70Safresh1	_test('use Module::Load undef;
1476fb12b70Safresh1			autoload("Data::Dumper");
1486fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
1496fb12b70Safresh1    isnt_def_sub();
1506fb12b70Safresh1
1516fb12b70Safresh1    done_testing();
1526fb12b70Safresh1};
1536fb12b70Safresh1
1546fb12b70Safresh1subtest 'noimport' => sub{
1556fb12b70Safresh1    for my $asq('"none"', '""', 'undef'){
1566fb12b70Safresh1		_test('use Module::Load '.$asq.';
1576fb12b70Safresh1				load("Data::Dumper");
1586fb12b70Safresh1				Data::Dumper->Dump([$WORLD]);');
1596fb12b70Safresh1		isnt_def_sub();
1606fb12b70Safresh1
1616fb12b70Safresh1		_test('use Module::Load '.$asq.';
1626fb12b70Safresh1				autoload("Data::Dumper");
1636fb12b70Safresh1				Data::Dumper->Dump([$WORLD]);');
1646fb12b70Safresh1		isnt_def_sub();
1656fb12b70Safresh1
1666fb12b70Safresh1		_test('use Module::Load '.$asq.';
1676fb12b70Safresh1				load_remote("XYZ::Module" => "Data::Dumper");
1686fb12b70Safresh1				Data::Dumper->Dump([$WORLD]);');
1696fb12b70Safresh1		isnt_def_sub();
1706fb12b70Safresh1
1716fb12b70Safresh1		_test('use Module::Load '.$asq.';
1726fb12b70Safresh1				autoload_remote("XYZ::Module" => "Data::Dumper");
1736fb12b70Safresh1				Data::Dumper->Dump([$WORLD]);');
1746fb12b70Safresh1		isnt_def_sub();
1756fb12b70Safresh1    }
1766fb12b70Safresh1    done_testing();
1776fb12b70Safresh1};
1786fb12b70Safresh1
1796fb12b70Safresh1subtest 'load_remote' => sub{
1806fb12b70Safresh1    _test('use Module::Load;
1816fb12b70Safresh1	    load_remote("XYZ::Module","Data::Dumper");
1826fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
1836fb12b70Safresh1    isnt_def_sub();
1846fb12b70Safresh1
1856fb12b70Safresh1    _test('use Module::Load;
1866fb12b70Safresh1	    load_remote("XYZ::Module","Data::Dumper");
1876fb12b70Safresh1    	    Dumper([$WORLD]);');
1886fb12b70Safresh1    isnt_def_sub();
1896fb12b70Safresh1
1906fb12b70Safresh1    _test('use Module::Load;
1916fb12b70Safresh1	    Module::Load::load_remote("XYZ::Module","Data::Dumper");
1926fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
1936fb12b70Safresh1    is_peace_in_world();
1946fb12b70Safresh1
1956fb12b70Safresh1    _test('use Module::Load;
1966fb12b70Safresh1	    Module::Load::load_remote("XYZ::Module","Data::Dumper");
1976fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
1986fb12b70Safresh1    isnt_def_sub();
1996fb12b70Safresh1
2006fb12b70Safresh1    _test('use Module::Load;
2016fb12b70Safresh1	    Module::Load::load_remote("XYZ::Module","Data::Dumper","Dumper");
2026fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
2036fb12b70Safresh1    is_peace_in_world();
2046fb12b70Safresh1
2056fb12b70Safresh1	_test('use Module::Load "all";
2066fb12b70Safresh1	    load_remote("XYZ::Module","______","Data::Dumper");
2076fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
2086fb12b70Safresh1    cant_locate();
2096fb12b70Safresh1
2106fb12b70Safresh1    done_testing();
2116fb12b70Safresh1};
2126fb12b70Safresh1
2136fb12b70Safresh1subtest 'autoload_remote' => sub{
2146fb12b70Safresh1    _test('use Module::Load;
2156fb12b70Safresh1	    autoload_remote("XYZ::Module","Data::Dumper");
2166fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2176fb12b70Safresh1    isnt_def_sub();
2186fb12b70Safresh1
2196fb12b70Safresh1    _test('use Module::Load;
2206fb12b70Safresh1	    autoload_remote("XYZ::Module","Data::Dumper");
2216fb12b70Safresh1	    Dumper([$WORLD]);');
2226fb12b70Safresh1    isnt_def_sub();
2236fb12b70Safresh1
2246fb12b70Safresh1    _test('use Module::Load;
2256fb12b70Safresh1	    Module::Load::autoload_remote("XYZ::Module","Data::Dumper");
2266fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2276fb12b70Safresh1    is_peace_in_world();
2286fb12b70Safresh1
2296fb12b70Safresh1    _test('use Module::Load;
2306fb12b70Safresh1	    Module::Load::autoload_remote("XYZ::Module","Data::Dumper");
2316fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
2326fb12b70Safresh1    is_peace_in_world();
2336fb12b70Safresh1
2346fb12b70Safresh1    _test('use Module::Load "all";
2356fb12b70Safresh1	    autoload_remote("XYZ::Module","______","Data::Dumper");
2366fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
2376fb12b70Safresh1    cant_locate();
2386fb12b70Safresh1
2396fb12b70Safresh1	done_testing();
2406fb12b70Safresh1};
2416fb12b70Safresh1
2426fb12b70Safresh1subtest 'complex' => sub{
2436fb12b70Safresh1	_test('use Module::Load "load","autoload","none";
2446fb12b70Safresh1			load("Data::Dumper");
2456fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2466fb12b70Safresh1    isnt_def_sub();
2476fb12b70Safresh1
2486fb12b70Safresh1	_test('use Module::Load "load","autoload","none";
2496fb12b70Safresh1			autoload("Data::Dumper");
2506fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2516fb12b70Safresh1    isnt_def_sub();
2526fb12b70Safresh1
2536fb12b70Safresh1	_test('use Module::Load "load","autoload","none";
2546fb12b70Safresh1			load_remote("Data::Dumper");
2556fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2566fb12b70Safresh1    isnt_def_sub();
2576fb12b70Safresh1
2586fb12b70Safresh1	_test('use Module::Load "load","autoload","none";
2596fb12b70Safresh1			autoload_remote("Data::Dumper");
2606fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2616fb12b70Safresh1    isnt_def_sub();
2626fb12b70Safresh1
2636fb12b70Safresh1	_test('use Module::Load "load","autoload";
2646fb12b70Safresh1			load("Data::Dumper", "Dumper");
2656fb12b70Safresh1			autoload("Carp");
2666fb12b70Safresh1	    croak( Dumper([$WORLD]) );');
2676fb12b70Safresh1    is_peace_in_world();
2686fb12b70Safresh1
2696fb12b70Safresh1	_test('use Module::Load "load","autoload";
2706fb12b70Safresh1			load_remote("Data::Dumper");');
2716fb12b70Safresh1    isnt_def_sub();
2726fb12b70Safresh1
2736fb12b70Safresh1	_test('use Module::Load "load","autoload";
2746fb12b70Safresh1			autoload_remote("Data::Dumper");');
2756fb12b70Safresh1    isnt_def_sub();
2766fb12b70Safresh1
2776fb12b70Safresh1	_test('use Module::Load "load","autoload","none";
2786fb12b70Safresh1			autoload_remote("Data::Dumper");
2796fb12b70Safresh1	    Data::Dumper->Dump([$WORLD]);');
2806fb12b70Safresh1    isnt_def_sub();
2816fb12b70Safresh1
2826fb12b70Safresh1	_test('use Module::Load "load","autoload","load_remote","autoload_remote";
2836fb12b70Safresh1			load("Carp");
2846fb12b70Safresh1			autoload("Data::Dumper");
2856fb12b70Safresh1			load_remote("XYZ::Module", "Carp");
2866fb12b70Safresh1			autoload_remote("XYZ::Module", "Carp");
2876fb12b70Safresh1	    Dumper([$WORLD]);');
2886fb12b70Safresh1    is_peace_in_world();
2896fb12b70Safresh1
2906fb12b70Safresh1	_test('use Module::Load "all";
2916fb12b70Safresh1			load("Carp");
2926fb12b70Safresh1			autoload("Data::Dumper");
2936fb12b70Safresh1			load_remote("XYZ::Module" => "Carp");
2946fb12b70Safresh1			autoload_remote("XYZ::Module" => "Carp");
2956fb12b70Safresh1	    Dumper([$WORLD]);');
2966fb12b70Safresh1    is_peace_in_world();
2976fb12b70Safresh1
2986fb12b70Safresh1	_test('use Module::Load "all","";
2996fb12b70Safresh1			load("Carp");');
3006fb12b70Safresh1    isnt_def_sub();
3016fb12b70Safresh1
3026fb12b70Safresh1    done_testing();
3036fb12b70Safresh1};
3046fb12b70Safresh1
3056fb12b70Safresh1subtest 'dumpxs' => sub{
3066fb12b70Safresh1    unless ( $Config::Config{usedl} ) {
3076fb12b70Safresh1      plan skip_all => 'Statically linked perl';
3086fb12b70Safresh1    }
3096fb12b70Safresh1    _test('use Module::Load;
3106fb12b70Safresh1	    load("Data::Dumper","Dumper","DumperX");
3116fb12b70Safresh1    	    Data::Dumper->Dump([$WORLD]);');
3126fb12b70Safresh1    is_peace_in_world();
3136fb12b70Safresh1
3146fb12b70Safresh1	_test('use Module::Load "all";
3156fb12b70Safresh1	    load("Data::Dumper","Dumper","DumperX");
3166fb12b70Safresh1    	    DumperX([$WORLD]);');
3176fb12b70Safresh1    is_peace_in_world();
3186fb12b70Safresh1
3196fb12b70Safresh1    _test('use Module::Load;
3206fb12b70Safresh1			Module::Load::autoload("Data::Dumper","Dumper","DumperX");
3216fb12b70Safresh1    	    DumperX($WORLD);');
3226fb12b70Safresh1    is_peace_in_world();
3236fb12b70Safresh1
3246fb12b70Safresh1    _test('use Module::Load "all";
3256fb12b70Safresh1			autoload("Data::Dumper","Dumper","DumperX");
3266fb12b70Safresh1    	    DumperX($WORLD);');
3276fb12b70Safresh1    is_peace_in_world();
3286fb12b70Safresh1
3296fb12b70Safresh1    _test('use Module::Load;
3306fb12b70Safresh1	    Module::Load::load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
3316fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
3326fb12b70Safresh1    is_peace_in_world();
3336fb12b70Safresh1
3346fb12b70Safresh1    _test('use Module::Load "load_remote";
3356fb12b70Safresh1	    load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
3366fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
3376fb12b70Safresh1    is_peace_in_world();
3386fb12b70Safresh1
3396fb12b70Safresh1    _test('use Module::Load "all";
3406fb12b70Safresh1	    load_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
3416fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
3426fb12b70Safresh1    is_peace_in_world();
3436fb12b70Safresh1
3446fb12b70Safresh1    _test('use Module::Load;
3456fb12b70Safresh1	    Module::Load::autoload_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
3466fb12b70Safresh1	    XYZ::Module::DumperX($WORLD);');
3476fb12b70Safresh1    is_peace_in_world();
3486fb12b70Safresh1
3496fb12b70Safresh1    _test('use Module::Load "autoload_remote";
3506fb12b70Safresh1	    autoload_remote("XYZ::Module","Data::Dumper","Dumper","DumperX");
3516fb12b70Safresh1	    XYZ::Module::Dumper($WORLD);');
3526fb12b70Safresh1    is_peace_in_world();
3536fb12b70Safresh1
3546fb12b70Safresh1    done_testing();
3556fb12b70Safresh1};
3566fb12b70Safresh1
3576fb12b70Safresh1done_testing();
3586fb12b70Safresh1
359