Michael G Schwern wrote:
> The attached proof-of-concept implements it.  I had to poke at the guts of
> TB to do it, there's no way to extend the plan without printing the plan, so
> it would need a minor TB patch.  But its very straight forward.

Figured out a way to not have to do that.  Just temporarily turn on
"no_header".  New version attached.  Feel free to take it and run.

package AsYouGo;

use strict;
use warnings;

use base qw(Test::Builder::Module);
our @EXPORT = qw(plan extend);

my $Extended = 0;
my $Is_As_You_Go = 0;

use CLASS;

sub plan {
    my($plan) = shift;

    my $tb = $CLASS->builder;

    if( $plan eq "as_you_go" ) {
        $Is_As_You_Go = 1;
        $tb->plan("no_plan");
    }
    else {  # pass through to TB
        $tb->plan(@_);
    }
}


sub extend {
    my($extra_tests) = shift;
    
    my $tb = $CLASS->builder;

    print "# Extending plan by $extra_tests\n";

    $extra_tests-- unless $Extended;  # there's already one

    # TB prints the plan when you set expected_tests() so we
    # suppress that.
    $tb->no_header(1);
    my $expected_tests = $tb->expected_tests;
    $tb->expected_tests($expected_tests + $extra_tests);
    $tb->no_header(0);
    
    $Extended = 1;
    
    1;
}


END {    
    if( $Is_As_You_Go && !$Extended ) {
        die "# An as_you_go plan declared but never extended!\n";
    }
}

1;

__END__

Reply via email to