X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/854a00d80afb6700138c1b8553393de2eb36e500..a85aec40e61a21ebd6e61fb1b82b3910e9f951db:/t/TEST diff --git a/t/TEST b/t/TEST index 8164786..63f0c36 100755 --- a/t/TEST +++ b/t/TEST @@ -14,12 +14,17 @@ # In which case, we need to stop t/TEST actually running tests, as all # t/harness needs are its subroutines. +# Measure the elapsed wallclock time. +my $t0 = time(); + # If we're doing deparse tests, ignore failures for these my $deparse_failures; # And skip even running these my $deparse_skips; +my $deparse_skip_file = '../Porting/deparse-skips.txt'; + # directories with special sets of test switches my %dir_to_switch = (base => '', @@ -36,10 +41,9 @@ my %abs = ( '../cpan/Archive-Tar' => 1, '../cpan/AutoLoader' => 1, '../cpan/CPAN' => 1, - '../cpan/Devel-PPPort' => 1, '../cpan/Encode' => 1, - '../cpan/ExtUtils-Command' => 1, '../cpan/ExtUtils-Constant' => 1, + '../cpan/ExtUtils-Install' => 1, '../cpan/ExtUtils-MakeMaker' => 1, '../cpan/ExtUtils-Manifest' => 1, '../cpan/File-Fetch' => 1, @@ -48,12 +52,11 @@ my %abs = ( '../cpan/Locale-Codes' => 1, '../cpan/Module-Load' => 1, '../cpan/Module-Load-Conditional' => 1, - '../cpan/Parse-CPAN-Meta' => 1, '../cpan/Pod-Simple' => 1, '../cpan/Test-Simple' => 1, '../cpan/podlators' => 1, '../dist/Cwd' => 1, - '../dist/ExtUtils-Install' => 1, + '../dist/Devel-PPPort' => 1, '../dist/ExtUtils-ParseXS' => 1, '../dist/Tie-File' => 1, ); @@ -67,15 +70,30 @@ my %temp_no_core = '../cpan/IO-Compress' => 1, '../cpan/MIME-Base64' => 1, '../cpan/parent' => 1, - '../cpan/Parse-CPAN-Meta' => 1, '../cpan/Pod-Simple' => 1, '../cpan/podlators' => 1, '../cpan/Test-Simple' => 1, '../cpan/Tie-RefHash' => 1, '../cpan/Unicode-Collate' => 1, - '../cpan/Unicode-Normalize' => 1, + '../dist/Unicode-Normalize' => 1, ); +# temporary workaround Apr 2017. These need '.' in @INC. +# Ideally this # list will eventually be empty + +my %temp_needs_dot = map { $_ => 1 } qw( + ../cpan/ExtUtils-Install + ../cpan/Filter-Util-Call + ../cpan/libnet + ../cpan/Locale-Codes + ../cpan/Math-BigInt + ../cpan/Math-BigRat + ../cpan/Test-Harness + ../cpan/Test-Simple + ../cpan/version +); + + # delete env vars that may influence the results # but allow override via *_TEST env var if wanted # (e.g. PERL5OPT_TEST=-d:NYTProf) @@ -120,6 +138,11 @@ $| = 1; # remove empty elements due to insertion of empty symbols via "''p1'" syntax @ARGV = grep($_,@ARGV) if $^O eq 'VMS'; + +# String eval to avoid loading File::Glob on non-miniperl. +# (Windows only uses this script for miniperl.) +@ARGV = eval 'map glob, @ARGV' if $^O eq 'MSWin32'; + our $show_elapsed_time = $ENV{HARNESS_TIMER} || 0; # Cheesy version of Getopt::Std. We can't replace it with that, because we @@ -149,7 +172,7 @@ if (-f 'TEST' && -f 'harness' && -d '../lib') { @INC = '../lib'; } -die "You need to run \"make test\" first to set things up.\n" +die "You need to run \"make test_prep\" first to set things up.\n" unless -e 'perl' or -e 'perl.exe' or -e 'perl.pm'; # check leakage for embedders @@ -217,7 +240,7 @@ sub _scan_test { close $script; - my $perl = './perl'; + my $perl = $^O eq 'MSWin32' ? '.\perl' : './perl'; my $lib = '../lib'; my $run_dir; my $return_dir; @@ -239,6 +262,9 @@ sub _scan_test { if ($temp_no_core{$run_dir}) { $testswitch = $testswitch . ',NC'; } + if($temp_needs_dot{$run_dir}) { + $testswitch = $testswitch . ',DOT'; + } } } elsif ($test =~ m!^\.\./lib!) { $testswitch = '-I.. -MTestInit=U1'; # -T will remove . from @INC @@ -401,6 +427,11 @@ sub _tests_from_manifest { if (m!^((?:cpan|dist|ext)/(\S+)/+(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) { my $t = $1; my $extension = $2; + + # XXX Generates way too many error lines currently. Skip for + # v5.22 + next if $t =~ /^cpan/ && ord("A") != 65; + if (!$::core || $t =~ m!^lib/[a-z]!) { if (defined $extension) { $extension =~ s!/t(:?/\S+)*$!!; @@ -428,7 +459,7 @@ unless (@ARGV) { # then comp, to validate that require works # then run, to validate that -M works # then we know we can -MTestInit for everything else, making life simpler - foreach my $dir (qw(base comp run cmd io re opbasic op uni mro)) { + foreach my $dir (qw(base comp run cmd io re opbasic op uni mro perf)) { _find_tests($dir); } unless ($::core) { @@ -464,10 +495,41 @@ unless (@ARGV) { push @ARGV, _tests_from_manifest($extensions, $known_extensions); unless ($::core) { _find_tests('japh') if $::torture; - _find_tests('t/benchmark') if $::benchmark or $ENV{PERL_BENCHMARK}; + _find_tests('benchmark') if $::benchmark or $ENV{PERL_BENCHMARK}; _find_tests('bigmem') if $ENV{PERL_TEST_MEMORY}; } } +@ARGV= do { + my @order= ( + "base", + "comp", + "run", + "cmd", + "io", + "re", + "opbasic", + "op", + "uni", + "mro", + "lib", + "ext", + "dist", + "cpan", + "perf", + "porting", + ); + my %order= map { $order[$_] => 1+$_ } 0..$#order; + my $idx= 0; + map { + $_->[0] + } sort { + $a->[3] <=> $b->[3] || + $a->[1] <=> $b->[1] + } map { + my $root= /(\w+)/ ? $1 : ""; + [ $_, $idx++, $root, $order{$root}||=0 ] + } @ARGV; +}; if ($::deparse) { _testprogs('deparse', '', @ARGV); @@ -533,6 +595,7 @@ EOT my $tested_files = 0; my $totmax = 0; my %failed_tests; + my @unexpected_pass; # files where deparse-skips.txt says fail but passed my $toolnm; # valgrind, cachegrind, perf while (my $test = shift @tests) { @@ -657,7 +720,10 @@ EOT } } } + my @junk = <$results>; # dump remaining output to prevent SIGPIPE + # (so far happens only on os390) close $results; + undef @junk; if (not defined $failure) { $failure = 'FAILED--no leader found' unless $seen_leader; @@ -681,8 +747,8 @@ EOT # Deparse? Should it have passed or failed? if ($type eq 'deparse' && $test =~ $deparse_failures) { if (!$failure) { - # Wait, it didn't fail? Great news! Tell someone! - $failure = "FAILED--all tests passed but test should have failed"; + # Wait, it didn't fail? Great news! + push @unexpected_pass, $test; } else { # Bah, still failing. Mask it. print "${te}skipped\n"; @@ -742,6 +808,17 @@ EOT for my $test ( sort keys %failed_tests ) { print "\t$test\n"; } + + if (@unexpected_pass) { + print <) { if (/__DEPARSE_FAILURES__/) { $in = \@deparse_failures; next; @@ -943,6 +1021,7 @@ sub _process_deparse_config { next unless $_; push @$in, $_; + warn "WARNING: $f:$.: excluded file doesn't exist: $_\n" unless -f $_; } for my $f (@deparse_failures, @deparse_skips) {