X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Frun.perl;h=1c7bcfc34db6fc3a24f28e468ee3d0d2f6f0827c;hb=352956bcf1933bdaeba631deb4ade7dc7fd754b1;hp=b1a0d2fe154c844b1c4e198468e5061cfd117288;hpb=62575c514f07260cff5865b7bf122e41178b0476;p=public-inbox.git diff --git a/t/run.perl b/t/run.perl index b1a0d2fe..1c7bcfc3 100755 --- a/t/run.perl +++ b/t/run.perl @@ -11,10 +11,13 @@ # Usage: $PERL -I lib -w t/run.perl -j4 # Or via prove(1): prove -lvw t/run.perl :: -j4 use strict; +use v5.10.1; +use IO::Handle; # ->autoflush 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; @@ -31,10 +34,10 @@ if (($ENV{TEST_RUN_MODE} // 2) == 0) { } my @tests = scalar(@ARGV) ? @ARGV : glob('t/*.t'); my $cwd = getcwd(); -open OLDOUT, '>&STDOUT' or die "dup STDOUT: $!"; -open OLDERR, '>&STDERR' or die "dup STDERR: $!"; -OLDOUT->autoflush(1); -OLDERR->autoflush(1); +open my $OLDOUT, '>&STDOUT' or die "dup STDOUT: $!"; +open my $OLDERR, '>&STDERR' or die "dup STDERR: $!"; +$OLDOUT->autoflush(1); +$OLDERR->autoflush(1); key2sub($_) for @tests; # precache @@ -52,7 +55,7 @@ if ($shuffle) { our $tb = Test::More->builder; sub DIE (;$) { - print OLDERR @_; + print $OLDERR @_; exit(1); } @@ -65,14 +68,28 @@ sub test_status () { 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]+$/; - print OLDERR map { "# $log: $_" } @not_ok; + 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; + my @err = grep { !$nr{$_}++ } @sk; + print $OLDERR "$pfx$_ ($nr{$_})\n" for @err; + $skip = ' # total skipped: '.scalar(@sk); + } } else { - print OLDERR "could not open: $log: $!\n"; + print $OLDERR "could not open: $log: $!\n"; } - print OLDOUT "$status $worker_test\n"; + print $OLDOUT "$status $worker_test$skip\n"; } } @@ -167,7 +184,7 @@ for (my $i = $repeat; $i != 0; $i--) { push @err, "job[$j] ($?)" if $?; # skip_all can exit(0), respawn if needed: if (!$eof) { - print OLDERR "# respawning job[$j]\n"; + print $OLDERR "# respawning job[$j]\n"; $start_worker->($i, $j, $rd, \@todo); } } @@ -190,4 +207,4 @@ for (my $i = $repeat; $i != 0; $i--) { DIE join('', map { "E: $_\n" } @err) if @err; } -print OLDOUT "1..".($repeat * scalar(@tests))."\n" if $repeat >= 0; +print $OLDOUT "1..".($repeat * scalar(@tests))."\n" if $repeat >= 0;