X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/59dac0a80aa33c5635ede2d8156fdaaa5b8d179f..c8191e192267f85bc25e6d4758e5c4344c984ffd:/t/TEST?ds=sidebyside diff --git a/t/TEST b/t/TEST index 841a5ad..5d25af6 100755 --- a/t/TEST +++ b/t/TEST @@ -14,6 +14,11 @@ # In which case, we need to stop t/TEST actually running tests, as all # t/harness needs are its subroutines. +# If we're doing deparse tests, ignore failures for these +my $deparse_failures; + +# And skip even running these +my $deparse_skips; # directories with special sets of test switches my %dir_to_switch = @@ -33,8 +38,11 @@ my %abs = ( '../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, '../cpan/IPC-Cmd' => 1, '../cpan/IPC-SysV' => 1, @@ -46,9 +54,6 @@ my %abs = ( '../cpan/Test-Simple' => 1, '../cpan/podlators' => 1, '../dist/Cwd' => 1, - '../dist/ExtUtils-Command' => 1, - '../dist/ExtUtils-Install' => 1, - '../dist/ExtUtils-Manifest' => 1, '../dist/ExtUtils-ParseXS' => 1, '../dist/Tie-File' => 1, ); @@ -133,6 +138,7 @@ our $show_elapsed_time = $ENV{HARNESS_TIMER} || 0; if ($1 =~ /^deparse(,.+)?$/) { $::deparse = 1; $::deparse_opts = $1; + _process_deparse_config(); } } @ARGV = @argv; @@ -545,15 +551,8 @@ EOT if ($test =~ /^$/) { next; } - if ($type eq 'deparse') { - if ($test eq "comp/redef.t") { - # Redefinition happens at compile time - next; - } - elsif ($test =~ m{lib/Switch/t/}) { - # B::Deparse doesn't support source filtering - next; - } + if ($type eq 'deparse' && $test =~ $deparse_skips) { + next; } my $te = $::path_to_name{$test} . '.' x ($dotdotdot - length($::path_to_name{$test})) .' '; @@ -666,7 +665,7 @@ EOT _check_valgrind(\$toolnm, \$grind_ct, \$test); - if ($type eq 'deparse') { + if ($type eq 'deparse' && !$ENV{KEEP_DEPARSE_FILES}) { unlink "./$test.dp"; } if (not defined $failure and $next != $max) { @@ -679,6 +678,19 @@ EOT $failure = "FAILED--non-zero wait status: $?"; } + # 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"; + } else { + # Bah, still failing. Mask it. + print "${te}skipped\n"; + $tested_files = $tested_files - 1; + next; + } + } + if (defined $failure) { print "${te}$failure\n"; $::bad_files = $::bad_files + 1; @@ -901,4 +913,51 @@ sub _cleanup_valgrind { } } +# Generate regexps of known bad filenames / skips from Porting/deparse-skips.txt +my $in; + +sub _process_deparse_config { + my @deparse_failures; + my @deparse_skips; + + my $f = '../Porting/deparse-skips.txt'; + + my $skips; + if (!open($skips, '<', $f)) { + warn "Failed to find $f: $!\n"; + return; + } + + while(<$skips>) { + if (/__DEPARSE_FAILURES__/) { + $in = \@deparse_failures; next; + } elsif (/__DEPARSE_SKIPS__/) { + $in = \@deparse_skips; next; + } elsif (!$in) { + next; + } + + s/#.*$//; # Kill comments + s/\s+$//; # And trailing whitespace + + next unless $_; + + push @$in, $_; + } + + for my $f (@deparse_failures, @deparse_skips) { + if ($f =~ m|/$|) { # Dir? Skip everything below it + $f = qr/\Q$f\E.*/; + } else { + $f = qr/\Q$f\E/; + } + } + + $deparse_failures = join('|', @deparse_failures); + $deparse_failures = qr/^(?:$deparse_failures)$/; + + $deparse_skips = join('|', @deparse_skips); + $deparse_skips = qr/^(?:$deparse_skips)$/; +} + # ex: set ts=8 sts=4 sw=4 noet: