This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Module::Load::Conditional to 0.20
[perl5.git] / lib / Module / Load / Conditional / t / 01_Module_Load_Conditional.t
index f46fd9c..45a4f69 100644 (file)
@@ -1,25 +1,29 @@
 ### Module::Load::Conditional test suite ###
-BEGIN { 
-    if( $ENV{PERL_CORE} ) {
-        chdir '../lib/Module/Load/Conditional' 
-            if -d '../lib/Module/Load/Conditional';
-        unshift @INC, '../../../..';
-    
-        ### fix perl location too
-        $^X = '../../../../../t/' . $^X;
-    }
-} 
-
+### this should no longer be needed
+# BEGIN { 
+#     if( $ENV{PERL_CORE} ) {
+#         chdir '../lib/Module/Load/Conditional' 
+#             if -d '../lib/Module/Load/Conditional';
+#         unshift @INC, '../../../..';
+#     
+#         ### fix perl location too
+#         $^X = '../../../../../t/' . $^X;
+#     }
+# } 
+
+BEGIN { use FindBin }
 BEGIN { chdir 't' if -d 't' }
 
 use strict;
-use lib qw[../lib to_load];
 use File::Spec ();
+use Test::More 'no_plan';
+
+use constant ON_VMS     => $^O eq 'VMS';
 
-use Test::More tests => 20;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/to_load";
 
-### case 1 ###
-use_ok( 'Module::Load::Conditional' ) or diag "Module.pm not found.  Dying", die;
+use_ok( 'Module::Load::Conditional' );
 
 ### stupid stupid warnings ###
 {   $Module::Load::Conditional::VERBOSE =   
@@ -40,17 +44,37 @@ use_ok( 'Module::Load::Conditional' ) or diag "Module.pm not found.  Dying", die
                 );
 
     ok( $rv->{uptodate},    q[Verify self] );
-    ok( $rv->{version} == $Module::Load::Conditional::VERSION,  
+    is( $rv->{version}, $Module::Load::Conditional::VERSION,  
                             q[  Found proper version] );
 
-    ok( $INC{'Module/Load/Conditional.pm'} eq
-        File::Spec::Unix->catfile(File::Spec->splitdir($rv->{file}) ),
+    ### break up the specification
+    my @rv_path = do {
+
+        ### Use the UNIX specific method, as the VMS one currently
+        ### converts the file spec back to VMS format.
+        my $class = ON_VMS ? 'File::Spec::Unix' : 'File::Spec';
+        
+        my($vol, $path, $file) = $class->splitpath( $rv->{'file'} );
+
+        my @path = ($vol, $class->splitdir( $path ), $file );
+
+        ### First element could be blank for some system types like VMS
+        shift @path if $vol eq '';
+
+        ### and return it    
+        @path;
+    };
+    
+    is( $INC{'Module/Load/Conditional.pm'},            
+            File::Spec::Unix->catfile(@rv_path),
                             q[  Found proper file]
     );
 
 }
 
-{
+### the version may contain an _, which means perl will warn about 'not
+### numeric' -- turn off that warning here.
+{   local $^W;
     my $rv = check_install(
                         module  => 'Module::Load::Conditional',
                         version => $Module::Load::Conditional::VERSION + 1,
@@ -78,7 +102,31 @@ use_ok( 'Module::Load::Conditional' ) or diag "Module.pm not found.  Dying", die
 
 }
 
-### test $FILE_VERSION
+### test finding a version of a module that mentions $VERSION in pod
+{   my $rv = check_install( module => 'InPod' );
+    ok( $rv,                        'Testing $VERSION in POD' );
+    ok( $rv->{version},             "   Version found" );
+    is( $rv->{version}, 2,          "   Version is correct" );
+}
+
+### test beta/developer release versions
+{   my $test_ver = $Module::Load::Conditional::VERSION;
+    
+    ### strip beta tags
+    $test_ver =~ s/_\d+//g;
+    $test_ver .= '_99';
+    
+    my $rv = check_install( 
+                    module  => 'Module::Load::Conditional', 
+                    version => $test_ver,
+                );
+
+    ok( $rv,                "Checking beta versions" );
+    ok( !$rv->{'uptodate'}, "   Beta version is higher" );
+    
+}    
+
+### test $FIND_VERSION
 {   local $Module::Load::Conditional::FIND_VERSION = 0;
     local $Module::Load::Conditional::FIND_VERSION = 0;
     
@@ -106,7 +154,7 @@ use_ok( 'Module::Load::Conditional' ) or diag "Module.pm not found.  Dying", die
 }
 
 {
-    my $use_list = { 'Must::Be::Loaded' => 1 };
+    my $use_list = { 'MustBe::Loaded' => 1 };
     my $bool = can_load( modules => $use_list );
 
     ok( !$bool, q[Detect out of date module] );
@@ -114,32 +162,30 @@ use_ok( 'Module::Load::Conditional' ) or diag "Module.pm not found.  Dying", die
 
 {
     delete $INC{'LoadIt.pm'};
-    delete $INC{'Must/Be/Loaded.pm'};
+    delete $INC{'MustBe/Loaded.pm'};
 
-    my $use_list = { 'LoadIt' => 1, 'Must::Be::Loaded' => 1 };
+    my $use_list = { 'LoadIt' => 1, 'MustBe::Loaded' => 1 };
     my $bool = can_load( modules => $use_list );
 
-    ok( !$INC{'LoadIt.pm'} && !$INC{'Must/Be/Loaded.pm'},
+    ok( !$INC{'LoadIt.pm'} && !$INC{'MustBe/Loaded.pm'},
         q[Do not load if one prerequisite fails]
     );
 }
 
 
 ### test 'requires' ###
-
 SKIP:{
     skip "Depends on \$^X, which doesn't work well when testing the Perl core", 
         1 if $ENV{PERL_CORE};
-    my %list = map { $_ => 1 } requires('Carp');
 
+    my %list = map { $_ => 1 } requires('Carp');
+    
     my $flag;
     $flag++ unless delete $list{'Exporter'};
 
     ok( !$flag, q[Detecting requirements] );
 }
 
-
-
 ### test using the %INC lookup for check_install
 {   local $Module::Load::Conditional::CHECK_INC_HASH = 1;
     local $Module::Load::Conditional::CHECK_INC_HASH = 1;
@@ -147,6 +193,9 @@ SKIP:{
     {   package A::B::C::D; 
         $A::B::C::D::VERSION = $$; 
         $INC{'A/B/C/D.pm'}   = $$.$$;
+        
+        ### XXX this is no longer needed with M::Load 0.11_01
+        #$INC{'[.A.B.C]D.pm'} = $$.$$ if $^O eq 'VMS';
     }
     
     my $href = check_install( module => 'A::B::C::D', version => 0 );
@@ -159,4 +208,3 @@ SKIP:{
                                 '   can_load successful' );
 }
 
-