This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix 01_Module_Load_Conditional.t on Win32 (broken by #31726)
[perl5.git] / lib / Module / Load / Conditional / t / 01_Module_Load_Conditional.t
1 ### Module::Load::Conditional test suite ###
2 BEGIN { 
3     if( $ENV{PERL_CORE} ) {
4         chdir '../lib/Module/Load/Conditional' 
5             if -d '../lib/Module/Load/Conditional';
6         unshift @INC, '../../../..';
7     
8         ### fix perl location too
9         $^X = '../../../../../t/' . $^X;
10     }
11
12
13 BEGIN { chdir 't' if -d 't' }
14
15 use strict;
16 use lib qw[../lib to_load];
17 use File::Spec ();
18
19 use Test::More tests => 23;
20
21 ### case 1 ###
22 use_ok( 'Module::Load::Conditional' );
23
24 ### stupid stupid warnings ###
25 {   $Module::Load::Conditional::VERBOSE =   
26     $Module::Load::Conditional::VERBOSE = 0;
27
28     *can_load       = *Module::Load::Conditional::can_load
29                     = *Module::Load::Conditional::can_load;
30     *check_install  = *Module::Load::Conditional::check_install
31                     = *Module::Load::Conditional::check_install;
32     *requires       = *Module::Load::Conditional::requires
33                     = *Module::Load::Conditional::requires;
34 }
35
36 {
37     my $rv = check_install(
38                         module  => 'Module::Load::Conditional',
39                         version => $Module::Load::Conditional::VERSION,
40                 );
41
42     ok( $rv->{uptodate},    q[Verify self] );
43     ok( $rv->{version} == $Module::Load::Conditional::VERSION,  
44                             q[  Found proper version] );
45
46     # This test is expecting the file to in UNIX format, so force
47     $rv->{file} = VMS::Filespec::unixify($rv->{file}) if $^O eq 'VMS';
48
49     # break up the specification
50     my @rv_path;
51     if ($^O eq 'VMS') {
52         # Use the UNIX specific method, as the VMS one currently
53         # converts the file spec back to VMS format.
54         @rv_path = File::Spec::Unix->splitpath($rv->{file});
55     } else {
56         @rv_path = File::Spec->splitpath($rv->{file});
57     }
58     @rv_path = ($rv_path[0], File::Spec->splitdir($rv_path[1]), $rv_path[2]);
59
60     # First element could be blank for some system types like VMS
61     shift @rv_path if $rv_path[0] eq '';
62
63     ok( $INC{'Module/Load/Conditional.pm'} eq
64         File::Spec::Unix->catfile(@rv_path),
65                             q[  Found proper file]
66     );
67
68 }
69
70 {
71     my $rv = check_install(
72                         module  => 'Module::Load::Conditional',
73                         version => $Module::Load::Conditional::VERSION + 1,
74                 );
75
76     ok( !$rv->{uptodate} && $rv->{version} && $rv->{file},
77         q[Verify out of date module]
78     );
79 }
80
81 {
82     my $rv = check_install( module  => 'Module::Load::Conditional' );
83
84     ok( $rv->{uptodate} && $rv->{version} && $rv->{file},
85         q[Verify any module]
86     );
87 }
88
89 {
90     my $rv = check_install( module  => 'Module::Does::Not::Exist' );
91
92     ok( !$rv->{uptodate} && !$rv->{version} && !$rv->{file},
93         q[Verify non-existant module]
94     );
95
96 }
97
98 ### test finding a version of a module that mentions $VERSION in pod
99 {   my $rv = check_install( module => 'InPod' );
100     ok( $rv,                        'Testing $VERSION in POD' );
101     ok( $rv->{version},             "   Version found" );
102     is( $rv->{version}, 2,          "   Version is correct" );
103 }
104
105 ### test $FIND_VERSION
106 {   local $Module::Load::Conditional::FIND_VERSION = 0;
107     local $Module::Load::Conditional::FIND_VERSION = 0;
108     
109     my $rv = check_install( module  => 'Module::Load::Conditional' );
110
111     ok( $rv,                        'Testing $FIND_VERSION' );
112     is( $rv->{version}, undef,      "   No version info returned" );
113     ok( $rv->{uptodate},            "   Module marked as uptodate" );
114 }    
115
116 ### test 'can_load' ###
117
118 {
119     my $use_list = { 'LoadIt' => 1 };
120     my $bool = can_load( modules => $use_list );
121
122     ok( $bool, q[Load simple module] );
123 }
124
125 {
126     my $use_list = { 'Commented' => 2 };
127     my $bool = can_load( modules => $use_list );
128
129     ok( $bool, q[Load module with a second, commented-out $VERSION] );
130 }
131
132 {
133     my $use_list = { 'Must::Be::Loaded' => 1 };
134     my $bool = can_load( modules => $use_list );
135
136     ok( !$bool, q[Detect out of date module] );
137 }
138
139 {
140     delete $INC{'LoadIt.pm'};
141     delete $INC{'Must/Be/Loaded.pm'};
142
143     my $use_list = { 'LoadIt' => 1, 'Must::Be::Loaded' => 1 };
144     my $bool = can_load( modules => $use_list );
145
146     ok( !$INC{'LoadIt.pm'} && !$INC{'Must/Be/Loaded.pm'},
147         q[Do not load if one prerequisite fails]
148     );
149 }
150
151
152 ### test 'requires' ###
153 SKIP:{
154     skip "Depends on \$^X, which doesn't work well when testing the Perl core", 
155         1 if $ENV{PERL_CORE};
156
157     my %list = map { $_ => 1 } requires('Carp');
158     
159     my $flag;
160     $flag++ unless delete $list{'Exporter'};
161
162     ok( !$flag, q[Detecting requirements] );
163 }
164
165 ### test using the %INC lookup for check_install
166 {   local $Module::Load::Conditional::CHECK_INC_HASH = 1;
167     local $Module::Load::Conditional::CHECK_INC_HASH = 1;
168     
169     {   package A::B::C::D; 
170         $A::B::C::D::VERSION = $$; 
171         $INC{'A/B/C/D.pm'}   = $$.$$;
172         $INC{'[.A.B.C]D.pm'} = $$.$$ if $^O eq 'VMS';
173     }
174     
175     my $href = check_install( module => 'A::B::C::D', version => 0 );
176
177     ok( $href,                  'Found package in %INC' );
178     is( $href->{'file'}, $$.$$, '   Found correct file' );
179     is( $href->{'version'}, $$, '   Found correct version' );
180     ok( $href->{'uptodate'},    '   Marked as uptodate' );
181     ok( can_load( modules => { 'A::B::C::D' => 0 } ),
182                                 '   can_load successful' );
183 }
184