Here's my test: #!/usr/bin/perl use strict; use warnings; use lib '.'; use MyTestMore 'no_plan', 'fail'; ok 1; ok 1; is 2, 3, 'bad'; ok 1;
Here's my output: ok 1 ok 2 not ok 3 - bad # Failed test 'bad' # at /System/Library/Perl/5.8.6/Test/More.pm line 329. # got: '2' # expected: '3' Test failed. Halting at MyTestMore.pm line 54. 1..3 # Looks like you failed 1 test of 3. # Looks like your test died just after 3. So we can preserve diagnostics, but we need help in cleaning up those damned line numbers. Hook::LexWrap didn't have the magic I thought it would. Below is how I did it. See the 'import' method. There's a lot more work to be done to get fine-grained control, but the line numbers are the important bit. Cheers, Ovid package MyTestMore;; use strict; use warnings; use Hook::LexWrap; # XXX don't use 'base' as it can override our signal handlers use Test::Builder::Module; our ( @ISA, @EXPORT ); use Test::More; use Test::Differences; use Test::Exception; BEGIN { @ISA = qw(Test::Builder::Module); @EXPORT = ( @Test::More::EXPORT, @Test::Differences::EXPORT, @Test::Exception::EXPORT, 'explain', ); if ( Test::Differences->VERSION <= 0.47 ) { # XXX There's a bug in Test::Differences 0.47 which attempts to render # an AoH in a cleaner 'table' format. # http://rt.cpan.org/Public/Bug/Display.html?id=29732 no warnings 'redefine'; *Test::Differences::_isnt_HASH_of_scalars = sub { return 1 if ref ne "HASH"; return scalar grep ref, values %$_; }; } } sub import { for my $i (0 .. $#_) { if ('fail' eq $_[$i]) { splice @_, $i, 1; wrap 'Test::Builder::ok', pre => sub { $_[0]->{XXX_test_failed} = 0; }, post => sub { $_[0]->{XXX_test_failed} = ![ $_[0]->summary ]->[-1]; }; wrap 'Test::Builder::diag', post => sub { if ( $_[0]->{XXX_test_failed} ) { $_[0]->{XXX_test_failed} = 0; die "Test failed. Halting"; } }; last; } } # 'magic' goto to avoid updating the callstack goto &Test::Builder::Module::import; } sub explain { return unless $ENV{TEST_VERBOSE}; Test::More::diag(@_); } 1; -- Buy the book - http://www.oreilly.com/catalog/perlhks/ Perl and CGI - http://users.easystreet.com/ovid/cgi_course/ Personal blog - http://publius-ovidius.livejournal.com/ Tech blog - http://use.perl.org/~Ovid/journal/