Scott McWhirter wrote:
> This would be easy to do in Test::Builder within &Test::Builder::ok by
> making it call $Test->BAIL_OUT();
> 
> Then at least you would get it across all Test::* modules.

yeah, that's what I was implying in my followup message.

the attached patch against 0.70 seems to do what I had in mind.

--Geoff
--- lib/Test/Builder.pm	2007-09-07 15:33:04.000000000 -0400
+++ lib/Test/Builder.pm!	2007-09-07 15:32:30.000000000 -0400
@@ -196,6 +196,8 @@
     $self->{No_Header}  = 0;
     $self->{No_Ending}  = 0;
 
+    $self->{Bail_Out_on_Failure}  = 0;
+
     $self->_dup_stdhandles unless $^C;
 
     return undef;
@@ -457,6 +459,10 @@
 	}
     } 
 
+    if (!$test && $self->{Bail_Out_on_Failure}) {
+      $self->BAIL_OUT('failure detected and bail_out_on_failure() set');
+    }
+
     return $test ? 1 : 0;
 }
 
@@ -1130,9 +1136,17 @@
 
 If set to true, no "1..N" header will be printed.
 
+=item B<bail_out_on_failure>
+
+    $Test->bail_out_on_failure($bail_out);
+
+Normally, Test::Builder continues right along on when a test fails.
+By setting this to true a failure will call BAIL_OUT() and all
+activity will be wrapped up as appropriate.
+
 =cut
 
-foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
+foreach my $attribute (qw(No_Header No_Ending No_Diag Bail_Out_on_Failure)) {
     my $method = lc $attribute;
 
     my $code = sub {

Reply via email to