X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Frun.perl;h=e3e3e07512fbd852edd1e0233399e2955c526a6a;hb=4a2cabdf41a835ca92c8806de90b866df1bc999c;hp=3e6801f2b21a6c738eebb54a29fa9f93365328d4;hpb=95bdac7f09c69036efed537a4d03d5bdd2ae4eb6;p=public-inbox.git diff --git a/t/run.perl b/t/run.perl index 3e6801f2..e3e3e075 100755 --- a/t/run.perl +++ b/t/run.perl @@ -15,6 +15,7 @@ use PublicInbox::TestCommon; use Cwd qw(getcwd); use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev); use Errno qw(EINTR); +use Fcntl qw(:seek); use POSIX qw(_POSIX_PIPE_BUF WNOHANG); my $jobs = 1; my $repeat = 1; @@ -26,7 +27,7 @@ GetOptions('j|jobs=i' => \$jobs, 'log=s' => \$log_suffix, 's|shuffle' => \$shuffle, ) or die "Usage: $0 [-j JOBS] [--log=SUFFIX] [--repeat RUNS]"; -if (($ENV{TEST_RUN_MODE} // 1) == 0) { +if (($ENV{TEST_RUN_MODE} // 2) == 0) { die "$0 is not compatible with TEST_RUN_MODE=0\n"; } my @tests = scalar(@ARGV) ? @ARGV : glob('t/*.t'); @@ -61,7 +62,36 @@ our ($worker, $worker_test); sub test_status () { $? = 255 if $? == 0 && !$tb->is_passing; my $status = $? ? 'not ok' : 'ok'; - print OLDOUT "$status $worker_test\n" if $log_suffix ne ''; + chdir($cwd) or DIE "chdir($cwd): $!"; + if ($log_suffix ne '') { + my $log = $worker_test; + $log =~ s/\.t\z/$log_suffix/; + my $skip = ''; + if (open my $fh, '<', $log) { + my @not_ok = grep(!/^(?:ok |[ \t]*#)/ms, <$fh>); + pop @not_ok if $not_ok[-1] =~ /^[0-9]+\.\.[0-9]+$/; + my $pfx = "# $log: "; + print OLDERR map { $pfx.$_ } @not_ok; + seek($fh, 0, SEEK_SET) or die "seek: $!"; + + # show unique skip texts and the number of times + # each text was skipped + local $/; + my @sk = (<$fh> =~ m/^ok [0-9]+ (# skip [^\n]+)/mgs); + if (@sk) { + my %nr; + $nr{$_}++ for @sk; + for (@sk) { + my $n = delete $nr{$_} or next; + print OLDERR "$pfx$_ ($n)\n"; + } + $skip = ' # total skipped: '.scalar(@sk); + } + } else { + print OLDERR "could not open: $log: $!\n"; + } + print OLDOUT "$status $worker_test$skip\n"; + } } # Test::Builder or Test2::Hub may call exit() from plan(skip_all => ...) @@ -112,7 +142,6 @@ my $start_worker = sub { my $t = unpack('I', $buf); run_test($todo->[$t]); $tb->reset; - chdir($cwd) or DIE "chdir: $!"; } kill 'USR1', $producer if !$eof; # sets $eof in $producer DIE join('', map { "E: $_\n" } @err) if @err;