X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2FTEST;h=d55874981fec06a2c68dbf6a00e7ac024f2a0859;hb=f6b3c421ec714744486f68cd1e3775fee60ba4e7;hp=5cd1927cac83a5904e5e9a83546c36c98a9a855e;hpb=b637ffadabdd74cf3d1ad745a96611c427d33ba5;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/TEST b/t/TEST index 5cd1927..d558749 100755 --- a/t/TEST +++ b/t/TEST @@ -5,10 +5,15 @@ $| = 1; +# Let tests know they're running in the perl core. Useful for modules +# which live dual lives on CPAN. +$ENV{PERL_CORE} = 1; + # Cheesy version of Getopt::Std. Maybe we should replace it with that. if ($#ARGV >= 0) { foreach my $idx (0..$#ARGV) { next unless $ARGV[$idx] =~ /^-(\S+)$/; + $core = 1 if $1 eq 'core'; $verbose = 1 if $1 eq 'v'; $with_utf= 1 if $1 eq 'utf8'; if ($1 =~ /^deparse(,.+)?$/) { @@ -64,20 +69,27 @@ sub _find_tests { } unless (@ARGV) { - foreach my $dir (qw(base comp cmd run io op pragma lib pod)) { + foreach my $dir (qw(base comp cmd run io op)) { _find_tests($dir); } + _find_tests("lib") unless $core; my $mani = File::Spec->catdir($updir, "MANIFEST"); if (open(MANI, $mani)) { - while () { - if (m!^((?:ext|lib)/.+/(?:t/.+\.t)|test.pl)\s!) { - push @ARGV, $1; - $OVER{$1} = File::Spec->catdir($updir, $1); + while () { # similar code in t/harness + if (m!^(ext/\S+/([^/]+\.t|test\.pl)|lib/\S+?(\.t|test\.pl))\s!) { + $t = $1; + if (!$core || $t =~ m!^lib/[a-z]!) + { + $path = File::Spec->catdir($updir, $t); + push @ARGV, $path; + $name{$path} = $t; + } } } } else { warn "$0: cannot open $mani: $!\n"; } + _find_tests('pod'); } # Tests known to cause infinite loops for the perlcc tests. @@ -115,14 +127,18 @@ EOT $total = @tests; $files = 0; $totmax = 0; - $maxlen = 0; + foreach (@tests) { - $len = length; + $name{$_} = File::Spec->catdir('t',$_) unless exists $name{$_}; + } + my $maxlen = 0; + foreach (@name{@tests}) { + s/\.\w+\z/./; + my $len = length ; $maxlen = $len if $len > $maxlen; } - # +3 : we want three dots between the test name and the "ok" - # -2 : the .t suffix - $dotdotdot = $maxlen + 3 - 2; + # + 3 : we want three dots between the test name and the "ok" + $dotdotdot = $maxlen + 3 ; while ($test = shift @tests) { if ( $infinite{$test} && $type eq 'compile' ) { @@ -142,8 +158,7 @@ EOT next; } } - $te = $test; - chop($te); + $te = $name{$test}; print "$te" . '.' x ($dotdotdot - length($te)); $test = $OVER{$test} if exists $OVER{$test}; @@ -172,8 +187,6 @@ EOT close(SCRIPT); } - $test = $OVER{$test} if exists $OVER{$test}; - my $utf = $with_utf ? '-I../lib -Mutf8' : ''; my $testswitch = '-I. -MTestInit'; # -T will strict . from @INC if ($type eq 'deparse') { @@ -186,7 +199,8 @@ EOT or print "can't deparse '$deparse': $!.\n"; } elsif ($type eq 'perl') { - my $run = "./perl $testswitch $switch $utf $test |"; + my $perl = $ENV{PERL} || './perl'; + my $run = "$perl $testswitch $switch $utf $test |"; open(RESULTS,$run) or print "can't run '$run': $!.\n"; } else { @@ -215,7 +229,7 @@ EOT $ok = 1; } else { - if (/^(not )?ok (\d+)(\s*#.*)?/ && + if (/^(not )?ok (\d+)[^#]*(\s*#.*)?/ && $2 == $next) { my($not, $num, $extra) = ($1, $2, $3); @@ -246,9 +260,11 @@ EOT } if ($ENV{PERL_3LOG}) { my $tpp = $test; + $tpp =~ s:^../::; $tpp =~ s:/:_:g; $tpp =~ s:\.t$::; - rename("perl.3log", "perl.3log.$tpp"); + rename("perl.3log", "perl.3log.$tpp") || + die "rename: perl3.log to perl.3log.$tpp: $!\n"; } $next = $next - 1; if ($ok && $next == $max) { @@ -289,22 +305,41 @@ EOT else { warn "Failed $bad test scripts out of $files, $pct% okay.\n"; } - warn <<'SHRDLU'; - ### Since not all tests were successful, you may want to run some - ### of them individually and examine any diagnostic messages they - ### produce. See the INSTALL document's section on "make test". - ### If you are testing the compiler, then ignore this message - ### and run - ### ./perl harness - ### in the directory ./t. -SHRDLU - warn <<'SHRDLU' if $good / $total > 0.8; - ### - ### Since most tests were successful, you have a good chance to - ### get information with better granularity by running + warn <<'SHRDLU_1'; + ### Since not all tests were successful, you may want to run some of + ### them individually and examine any diagnostic messages they produce. + ### See the INSTALL document's section on "make test". +SHRDLU_1 + warn <<'SHRDLU_2' if $good / $total > 0.8; + ### You have a good chance to get more information by running ### ./perl harness - ### in directory ./t. -SHRDLU + ### in the 't' directory since most (>=80%) of the tests succeeded. +SHRDLU_2 + if (eval {require Config; import Config; 1}) { + if (my $p = $Config{ldlibpthname}) { + warn <