Fix parsing of readline(FH) [perl #68458]
[p5sagit/p5-mst-13.2.git] / t / harness
index c2fbbee..1eb85f1 100644 (file)
--- a/t/harness
+++ b/t/harness
@@ -200,19 +200,34 @@ if (@ARGV) {
        push @last, <pod/*.t>;
        push @last, <x2p/*.t>;
 
+       my %times;
+       if ($state) {
+           # Where known, collate the elapsed times by test name
+           foreach ($state->results->tests()) {
+               $times{$_->name} = $_->elapsed();
+           }
+       }
+
+       my %dir;
+       my %total_time;
+
+       for (@last) {
+           if ($^O eq 'MSWin32') {
+               s,\\,/,g; # canonicalize path
+           };
+           m!(.*[/])! or die "'$_'";
+           push @{$dir{$1}}, $_;
+           $total_time{$1} += $times{$_} || 0;
+       }
+
        push @tests, @last;
 
        # Generate T::H schedule rules that run the contents of each directory
        # sequentially.
-       {
-           my %dir;
-           for (@last) {
-               s{[^/]+$}{\*};
-               $dir{$_}++;
-           }
-
-           push @seq, { par => [ map { { seq => $_ } } sort keys %dir ] };
-       }
+       push @seq, { par => [ map { { seq => "$_*" } } sort {
+           # Directories, ordered by total time descending then name ascending
+           $total_time{$b} <=> $total_time{$a} || $a cmp $b
+       } keys %dir ] };
 
        $rules = { seq => \@seq };
     }