Looks like I have it now.  I removed Hook::LexWrap, handled the
$Test::Builder::Level myself and did some curious work to preserve the
exact return value behavior of Test::Builder::diag.

Remove Hook::LexWrap and change the 'if fail' test in the import method
to the following:


  if ('fail' eq $_[$i]) {
      splice @_, $i, 1;
      my $ok = \&Test::Builder::ok;
      no warnings 'redefine';
      *Test::Builder::ok = sub {
          local $Test::Builder::Level = $Test::Builder::Level + 1;
          $_[0]->{XXX_test_failed} = 0;
          my $result = $ok->(@_);
          $_[0]->{XXX_test_failed} = ![ $_[0]->summary ]->[-1];
          return $result;
      };    
      my $diag = \&Test::Builder::diag;
      *Test::Builder::diag = sub {
          local $Test::Builder::Level = $Test::Builder::Level + 1;
          my @result = $diag->(@_);
          if ( $_[0]->{XXX_test_failed} ) {
              $_[0]->{XXX_test_failed} = 0;
              die "Test failed.  Halting.\n";
          }     

          # this strange beast is to capture the exact behavior of
          # Test::Builder::diag
          return @result ? 0 : ();
        };
      last;
  }

Cheers,
Ovid

--
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/

Reply via email to