(retracted by #13597, #13593 does the job better)
[p5sagit/p5-mst-13.2.git] / t / test.pl
index 6529b92..bd5d577 100644 (file)
--- a/t/test.pl
+++ b/t/test.pl
@@ -6,6 +6,7 @@ my $test = 1;
 my $planned;
 
 $TODO = 0;
+$NO_ENDING = 0;
 
 sub plan {
     my $n;
@@ -21,8 +22,8 @@ sub plan {
 
 END {
     my $ran = $test - 1;
-    if (defined $planned && $planned != $ran) {
-       print STDOUT "# Looks like you planned $planned tests but ran $ran.\n";
+    if (!$NO_ENDING && defined $planned && $planned != $ran) {
+        print STDOUT "# Looks like you planned $planned tests but ran $ran.\n";
     }
 }
 
@@ -41,6 +42,8 @@ sub _ok {
     # VMS will avenge.
     my $out;
     if ($name) {
+        # escape out '#' or it will interfere with '# skip' and such
+        $name =~ s/#/\\#/g;
        $out = $pass ? "ok $test - $name" : "not ok $test - $name";
     } else {
        $out = $pass ? "ok $test" : "not ok $test";
@@ -265,31 +268,50 @@ sub BAILOUT {
 
 # A way to display scalars containing control characters and Unicode.
 sub display {
-    map { join("", map { $_ > 255 ? sprintf("\\x{%x}", $_) : chr($_) =~ /[[:cntrl:]]/ ? sprintf("\\%03o", $_) : chr($_) } unpack("U*", $_) } @_;
+    map { join("", map { $_ > 255 ? sprintf("\\x{%x}", $_) : chr($_) =~ /[[:cntrl:]]/ ? sprintf("\\%03o", $_) : chr($_) } unpack("U*", $_)) } @_;
 }
 
 
 # A somewhat safer version of the sometimes wrong $^X.
-BEGIN: {
-    eval {
-        require File::Spec;
-        require Config;
-        Config->import;
-    };
-    warn "test.pl had problems loading other modules: $@" if $@;
-}
-
-# We do this at compile time before the test might have chdir'd around
-# and make sure its absolute in case they do later.
-my $Perl = $^X;
-$Perl = File::Spec->rel2abs(File::Spec->catfile(File::Spec->curdir(), $Perl))
-               if $^X eq "perl$Config{_exe}";
-warn "Can't generate which_perl from $^X" unless -f $Perl;
-
-# For subcommands to use.
-$ENV{PERLEXE} = $Perl;
-
+my $Perl;
 sub which_perl {
+    unless (defined $Perl) {
+       $Perl = $^X;
+       
+       my $exe;
+       eval "require Config; Config->import";
+       if ($@) {
+           warn "test.pl had problems loading Config: $@";
+           $exe = '';
+       } else {
+           $exe = $Config{_exe};
+       }
+       
+       # This doesn't absolutize the path: beware of future chdirs().
+       # We could do File::Spec->abs2rel() but that does getcwd()s,
+       # which is a bit heavyweight to do here.
+       
+       if ($Perl =~ /^perl\Q$exe\E$/i) {
+           my $perl = "perl$exe";
+           eval "require File::Spec";
+           if ($@) {
+               warn "test.pl had problems loading File::Spec: $@";
+               $Perl = "./$perl";
+           } else {
+               $Perl = File::Spec->catfile(File::Spec->curdir(), $perl);
+           }
+       }
+       
+        # Its like this.  stat on Cygwin treats 'perl' to mean 'perl.exe'
+        # but open does not.  This can get confusing, so to be safe we
+        # always put the .exe on the end on Cygwin.
+        $Perl .= $exe if $^O eq 'cygwin' && $Perl !~ /\Q$exe\E$/;
+
+       warn "which_perl: cannot find $Perl from $^X" unless -f $Perl;
+       
+       # For subcommands to use.
+       $ENV{PERLEXE} = $Perl;
+    }
     return $Perl;
 }