(I should have put "Solved" in quotes)
There appears to be a huge amount of disagreement at
http://perlmonks.org/?node_id=574085 regarding how to approach synchronizing
STDERR and STDOUT. While many offer useful suggestions, the suggestions tend
to be rather complicated, might require non-core modules or don't guarantee
that STDERR and STDOUT be in synch. I'm looking at a bewildering array of
stuff and I can't test these suggestions easily since I don't have access to
multiple operating systems or Perl versions. However, I thought of the
following trick.
When TAPx::Parser runs a Perl test script, it first fetches the switches.
There are two basic switches, those defined in the test script and those the
user defines. However, I just added a third:
my @switches = (
$self->switches,
qw(-MTest::Builder -MTAPX::Parser::Builder),
);
# get switches from test script
In adding those two, I first load Test::Builder and then I load my tiny little
override:
package TAPx::Parser::Builder;
use strict;
{
local $^W;
my $overridden;
sub Test::Builder::failure_output {
my ( $self, $fh ) = @_;
if ( defined $fh ) {
$self->{Fail_FH} = $self->_new_fh($fh);
$overridden = 1;
}
return $overridden ? $self->{Fail_FH} : $self->output;
}
}
1;
$self->output is where the non-diag output goes. So for any test code which
doesn't try to redirect failure output, I can parse all results flawlessly.
For test code which does try to redirect failure output, I probably won't get
the comments but everything else will parse just fine.
Now I have guaranteed cross-platform behavior, STDERR and STDOUT are guaranteed
to be in synch, this doesn't cause any problems for Test::Harness, I don't need
to fork Test::Builder and I override one method which has not changed since May
2005. Unfortunately, I'll have to alter the above to handle versions of
Test-Simple prior to 0.60 and that sucks, but it also *seems* to work
flawlessly.
I'm sure folks may not be happy about this, but it works. Thoughts? It makes
me squirm, but I am not in a position to test the other alternatives and I have
no desire to even try and write code I can't test.
Cheers,
Ovid
--
Buy the book -- http://www.oreilly.com/catalog/perlhks/
Perl and CGI -- http://users.easystreet.com/ovid/cgi_course/