Abe Timmerman wrote:
> Hi all,
>
>
> I'm looking into running part of our test-suite in parallel.
> TAP::Harness understands the way we'd like the tests ordered:
>
> { seq => [
> { seq => [ glob 't/0*.t' ] },
> { par => [ glob 't/1*.t' ] },
> { par => [ glob 't/{2,3,4,5,6,7,8}*.t' ] },
> { seq => [ glob 't/9*.t' ] },
> ]}
>
>
> App::Prove can only do a simple version of rules (that ends up running the
> tests all wrong).
>
> On the other hand, prove has all the logic we need to get the job done.
>
> Is there a way, without redoing all the work in App::Prove to get this done?
I looked at plugins for prove, but they are called "too early" for my
purpose (_get_args() expects an arrayref in $prove->{rules}).
I ended up doing this:
$cat pprove
#! /usr/bin/perl
use warnings;
use strict;
{
my $prove = App::Prove::Rules->new;
$prove->process_args( @ARGV );
$prove->test_rules({
seq => [
{ seq => [ glob 't/0*.t' ] },
{ par => [ glob 't/1*.t' ] },
{ par => [ glob 't/{2,3,4,5,6,7,8}*.t' ] },
{ seq => [ glob 't/9*.t' ] },
]
});
exit ( $prove->run ? 0 : 1 );
}
package App::Prove::Rules;
use warnings;
use strict;
use App::Prove 3.13;
use base 'App::Prove';
sub test_rules {
my ($self) = shift;
if ( @_ ) { $self->{test_rules} = shift }
return $self->{test_rules};
}
sub _get_args {
my $self = shift;
my ($args, $class) = $self->SUPER::_get_args( @_ );
if ( $self->test_rules ) {
$args->{rules} = $self->{test_rules};
}
return ( $args, $class );
}
1;
__END__
HTH +
Good luck,
Abe.
--
_ | "Pinky, are you pondering what I'm pondering?"
( ) | I think so, Brain, but culottes have a tendency to ride up so. (23
X | Nov 93 - When Mice Ruled the Earth)
/ \ |
signature.asc
Description: OpenPGP digital signature
