On Tue, Apr 12, 2005 at 02:02:07PM -0400, Sam Tregar wrote:
> On Tue, 12 Apr 2005, Paul Johnson wrote:
> 
> > I would do it in the same way as if this had nothing to do with tests.
> > That is, abstract away the common code into a module, which can also
> > live under t/
> 
> That would be a lot of work in this case.  I found an easier
> solution.  In tweek-then-foo.t:
> 
>   {
>      local $ENV{SUB_TEST} = 1;
>      do 't/foo.t' or die ...;
>   }

That's almost exactly what the DBI does when testing DBI::PurePerl.

        #!perl -w
        local $ENV{DBI_PUREPERL} = 2;
        do 't/01basics.t' or warn $!;
        die if $@;
        exit 0

I found the "... or warn $!; die if $@;" incantation worked best.

The DBI's Makefile.PL automatically writes a zvpp_*.t for all
existing *.t files. I've appended the code that does that.
Note the extra wrinkle to DTRT for threads.

Tim.


        foreach my $test (sort @tests) {
            next if $test !~ /^[0-8]/;
            my $usethr = ($test =~ /(\d+|\b)thr/ && $] >= 5.008 && 
$Config{useithreads});

            while ( my ($v_type, $v_info) = each %test_variants ) {
                my $v_test = "t/zv${v_type}_$test";
                printf "Creating %-16s test variant: $v_test %s\n",
                    $v_info->{name}, ($usethr) ? "(use threads)" : "";
                open PPT, ">$v_test" or warn "Can't create $v_test: $!";
                print PPT "#!perl -w\n";
                print PPT "use threads;\n" if $usethr;
                print PPT "$_\n" foreach @{$v_info->{add}};
                print PPT "do 't/$test' or warn \$!;\n";
                print PPT 'die if $@;'."\n";
                print PPT "exit 0\n";
                close PPT or warn "Error writing $v_test: $!";
            }
        }

Reply via email to