Hi all,
As threatened in comments on Ovid's journal about colorizing test output
(and displaying better diagnostics on success or failure), here's a
small patch to Test::Harness::Straps to collect the diagnostic
information currently dumped to STDERR and to store it in the test data
structure for Straps users to collect:
http://use.perl.org/~Ovid/journal/22899
I haven't added a flag to enable or disable this and
Test::Harness::Straps itself could use some severe refactoring, but this
is just a first pass to see if it's something other people might like.
I've also attached a patch to qtest to show how to use it.
Enjoy,
-- c
diff -ur lib/Test/Harness/Straps.pm~ lib/Test/Harness/Straps.pm
--- lib/Test/Harness/Straps.pm~ 2004-12-31 13:28:32.000000000 -0800
+++ lib/Test/Harness/Straps.pm 2005-01-26 15:30:41.000000000 -0800
@@ -8,6 +8,7 @@
use Config;
$VERSION = '0.20';
+use IPC::Open3;
use Test::Harness::Assert;
use Test::Harness::Iterator;
@@ -228,6 +229,13 @@
$type = 'bailout';
$self->{saw_bailout} = 1;
}
+ elsif ($result{number} and my $extra = $self->_is_extra_line( $line ))
+ {
+ my $test = $totals->{details}[$result{number} - 1];
+ $test->{extra} ||= '';
+ $test->{extra} .= $extra;
+ $type = 'other';
+ }
else {
$type = 'other';
}
@@ -237,6 +245,14 @@
$self->{'next'} = $result{number} + 1 if $type eq 'test';
}
+sub _is_extra_line
+{
+ my ($self, $line, $test) = @_;
+ return if index( $line, '# Looks like you failed' ) == 0;
+ $line =~ s/^#//;
+ return $line;
+}
+
=head2 C<analyze_fh>
my %results = $strap->analyze_fh($name, $test_filehandle);
@@ -282,13 +298,17 @@
# *sigh* this breaks under taint, but open -| is unportable.
my $line = $self->_command_line($file);
- unless( open(FILE, "$line|") ) {
+ my $reader;
+
+ my $pid;
+ unless ($pid = open3( undef, $reader, $reader, $line ))
+ {
print "can't run $file. $!\n";
return;
- }
+ }
- my %results = $self->analyze_fh($file, \*FILE);
- my $exit = close FILE;
+ my %results = $self->analyze_fh($file, $reader);
+ my $exit = waitpid $pid, 0;
$results{'wait'} = $?;
if( $? && $self->{_is_vms} ) {
eval q{use vmsish "status"; $results{'exit'} = $?};
--- qtest~ 2005-01-26 15:37:32.000000000 -0800
+++ qtest 2005-01-26 15:37:26.000000000 -0800
@@ -43,7 +43,10 @@
{
$count++;
next if $test->{ok};
- $report .= create_test_result( $count, @{ $test }{qw( name reason ) } );
+ $report .= create_test_result(
+ $count,
+ @{ $test }{qw( name reason extra ) }
+ );
}
return $report;
@@ -59,9 +62,9 @@
sub create_test_result
{
- my ($number, $name, $reason) = @_;
- $name =~ s/^-\s*//;
- $reason ||= '';
- $reason = " ($reason)" if $reason;
- return sprintf "\tTest #%d: %s%s\n", $number, $name, $reason;
+ my ($number, $name, $reason, $extra) = @_;
+ $name =~ s/^-\s*//;
+ $reason ||= '';
+ $reason = " ($reason)" if $reason;
+ return sprintf "\tTest #%d: %s%s\n%s", $number, $name, $reason, $extra;
}