This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
mktables: Add comment
[perl5.git] / lib / vmsish.t
index ff3f5b5..f2b451d 100644 (file)
@@ -5,10 +5,12 @@ BEGIN {
     @INC = '../lib'; 
 }
 
-my $Invoke_Perl = qq(MCR $^X "-I[-.lib]");
+my $perl = $^X;
+$perl = VMS::Filespec::vmsify($perl) if $^O eq 'VMS';
 
-require "./test.pl";
-plan(tests => 25);
+my $Invoke_Perl = qq(MCR $perl "-I[-.lib]");
+
+use Test::More tests => 29;
 
 SKIP: {
     skip("tests for non-VMS only", 1) if $^O eq 'VMS';
@@ -22,11 +24,11 @@ SKIP: {
 }
 
 SKIP: {
-    skip("tests for VMS only", 24) unless $^O eq 'VMS';
+    skip("tests for VMS only", 28) unless $^O eq 'VMS';
 
 #========== vmsish status ==========
 `$Invoke_Perl -e 1`;  # Avoid system() from a pipe from harness.  Mutter.
-is($?,0,"simple Perl invokation: POSIX success status");
+is($?,0,"simple Perl invocation: POSIX success status");
 {
   use vmsish qw(status);
   is(($? & 1),1, "importing vmsish [vmsish status]");
@@ -50,7 +52,7 @@ is($?,0,"outer lex scope of vmsish [POSIX status]");
 
   $msg = do_a_perl('-e "exit 1"');
     $msg =~ s/\n/\\n/g; # keep output on one line
-  like($msg,'ABORT', "POSIX ERR exit, DCL error message check");
+  like($msg, qr/ABORT/, "POSIX ERR exit, DCL error message check");
   is($?&1,0,"vmsish status check, POSIX ERR exit");
 
   $msg = do_a_perl('-e "use vmsish qw(exit); exit 1"');
@@ -58,27 +60,43 @@ is($?,0,"outer lex scope of vmsish [POSIX status]");
   ok(length($msg)==0,"vmsish OK exit, DCL error message check");
   is($?&1,1, "vmsish status check, vmsish OK exit");
 
+  $msg = do_a_perl('-e "\&CORE::exit;use vmsish qw(exit);&CORE::exit(1)"');
+    $msg =~ s/\n/\\n/g; # keep output on one line
+  ok(length($msg)==0,"vmsish OK exit (via &CORE::), DCL err msg check");
+  is($?&1,1, "vmsish status check, vmsish OK exit (&CORE::exit)");
+
   $msg = do_a_perl('-e "use vmsish qw(exit); exit 44"');
     $msg =~ s/\n/\\n/g; # keep output on one line
-  like($msg, 'ABORT', "vmsish ERR exit, DCL error message check");
+  like($msg, qr/ABORT/, "vmsish ERR exit, DCL error message check");
   is($?&1,0,"vmsish ERR exit, vmsish status check");
 
   $msg = do_a_perl('-e "use vmsish qw(hushed); exit 1"');
   $msg =~ s/\n/\\n/g; # keep output on one line
   ok(($msg !~ /ABORT/),"POSIX ERR exit, vmsish hushed, DCL error message check");
 
+  $msg = do_a_perl('-e "\&CORE::exit; use vmsish qw(hushed); '
+                  .'vmsish::hushed(0); &CORE::exit 1"');
+  $msg =~ s/\n/\\n/g; # keep output on one line
+  ok(($msg !~ /ABORT/),
+   "POSIX ERR exit, vmsish hushed, DCL error message check (&CORE::exit)");
+
   $msg = do_a_perl('-e "use vmsish qw(exit hushed); exit 44"');
     $msg =~ s/\n/\\n/g; # keep output on one line
   ok(($msg !~ /ABORT/),"vmsish ERR exit, vmsish hushed, DCL error message check");
 
   $msg = do_a_perl('-e "use vmsish qw(exit hushed); no vmsish qw(hushed); exit 44"');
   $msg =~ s/\n/\\n/g; # keep output on one line
-  like($msg,'ABORT',"vmsish ERR exit, no vmsish hushed, DCL error message check");
+  like($msg, qr/ABORT/,"vmsish ERR exit, no vmsish hushed, DCL error message check");
 
   $msg = do_a_perl('-e "use vmsish qw(hushed); die(qw(blah));"');
   $msg =~ s/\n/\\n/g; # keep output on one line
   ok(($msg !~ /ABORT/),"die, vmsish hushed, DCL error message check");
 
+  $msg = do_a_perl('-e "\&CORE::die; use vmsish qw(hushed); '
+                  .'vmsish::hushed(0); &CORE::die(qw(blah));"');
+  $msg =~ s/\n/\\n/g; # keep output on one line
+  ok(($msg !~ /ABORT/),"&CORE::die, vmsish hushed, DCL error msg check");
+
   $msg = do_a_perl('-e "use vmsish qw(hushed); use Carp; croak(qw(blah));"');
   $msg =~ s/\n/\\n/g; # keep output on one line
   ok(($msg !~ /ABORT/),"croak, vmsish hushed, DCL error message check");
@@ -112,8 +130,19 @@ is($?,0,"outer lex scope of vmsish [POSIX status]");
     eval "END { \$ENV{'SYS\$TIMEZONE_DIFFERENTIAL'} = $oldtz; }";
     gmtime(0); # Force reset of tz offset
   }
+
+  # Unless we are prepared to parse the timezone rules here and figure out
+  # what the correct offset was when the file was last revised, we need to 
+  # use a file for which the current offset is known to be valid.  That's why
+  # we create a file rather than using an existing one for the stat() test.
+
+  my $file = 'sys$scratch:vmsish_t_flirble.tmp';
+  open TMP, ">$file" or die "Couldn't open file $file";
+  close TMP;
+  END { 1 while unlink $file; }
+
   {
-     use_ok('vmsish qw(time)');
+     use_ok('vmsish', 'time');
 
      # but that didn't get it in our current scope
      use vmsish qw(time);
@@ -121,12 +150,12 @@ is($?,0,"outer lex scope of vmsish [POSIX status]");
      $vmstime   = time;
      @vmslocal  = localtime($vmstime);
      @vmsgmtime = gmtime($vmstime);
-     $vmsmtime  = (stat $0)[9];
+     $vmsmtime  = (stat $file)[9];
   }
   $utctime   = time;
   @utclocal  = localtime($vmstime);
   @utcgmtime = gmtime($vmstime);
-  $utcmtime  = (stat $0)[9];
+  $utcmtime  = (stat $file)[9];
   
   $offset = $ENV{'SYS$TIMEZONE_DIFFERENTIAL'};