Heya,
Attached are a number of small patches for TAP::Harness and associated
packages. I'm sending this here, because it's not clear from the
documentation where bugs and patches should be sent. The Test::Harness
queue cc's all of p5p, so I erred away from using that.
First, app-prove-rules.patch provides a command-line option to prove
which allows you a small amount of control over the new scheduler. This
is fairly important, as the default rule of { par => '*' } means that
only tests in the current directory get run in parallel. Since most of
the time my tests are in 't/', this means that since version 3.12 or so,
-j never runs more than one test at once.
tap-parser-scheduler-starstar.patch adds support for things like 't/**'
as a rule, meaning "everything under t/, including in subdirectories."
tap-parser-bugreporting.patch changes the BUGS section to refer to the
Test-Harness rt.cpan queue, instead of the TAPx-Parser queue.
Finally, fix-tprove_gtk-example.patch makes the tprove_gtk example
actually seem to work with the current codebase.
- Alex
--
Networking -- only one letter away from not working
Index: lib/App/Prove.pm
===================================================================
--- lib/App/Prove.pm (revision 1131)
+++ lib/App/Prove.pm (working copy)
@@ -58,7 +58,7 @@
harness includes modules plugins jobs lib merge parse quiet
really_quiet recurse backwards shuffle taint_fail taint_warn timer
verbose warnings_fail warnings_warn show_help show_man
- show_version test_args state dry extension ignore_exit
+ show_version test_args state dry extension ignore_exit rules
);
for my $attr (@ATTR) {
no strict 'refs';
@@ -88,7 +88,7 @@
my $args = shift || {};
# setup defaults:
- for my $key (qw( argv rc_opts includes modules state plugins )) {
+ for my $key (qw( argv rc_opts includes modules state plugins rules )) {
$self->{$key} = [];
}
$self->{harness_class} = 'TAP::Harness';
@@ -223,6 +223,7 @@
't' => \$self->{taint_warn},
'W' => \$self->{warnings_fail},
'w' => \$self->{warnings_warn},
+ 'rules=s@' => $self->{rules},
) or croak('Unable to continue');
# Stash the remainder of argv for later
@@ -334,6 +335,18 @@
$args{test_args} = $test_args;
}
+ if ( @{ $self->rules }) {
+ my @rules;
+ for ( @{ $self->rules } ) {
+ if (/^par=(.*)/) {
+ push @rules, $1;
+ } elsif (/^seq=(.*)/) {
+ push @rules, { seq => $1 };
+ }
+ }
+ $args{rules} = { par => [ @rules ] };
+ }
+
return ( \%args, $self->{harness_class} );
}
Index: examples/bin/tprove_gtk
===================================================================
--- examples/bin/tprove_gtk (revision 1131)
+++ examples/bin/tprove_gtk (working copy)
@@ -407,16 +407,8 @@
my $source = TAP::Parser::Source::Perl->new();
foreach my $test ( @{ $self->{_tests} } ) {
- my $stream = $source->source($test)->get_stream();
- if ($stream) {
- my $parser = $self->analyze( $test, $stream );
-
- # $aggregate -> add($test, $parser);
- }
- else {
- warn "Could not run `$test´: " . $source->error();
- next;
- }
+ my $parser = TAP::Parser->new( { source => $test } );
+ $self->analyze( $test, $parser ) if $parser;
}
my $writer = $self->{_writer};
@@ -425,12 +417,11 @@
}
sub analyze {
- my ( $self, $test, $stream ) = @_;
+ my ( $self, $test, $parser ) = @_;
my $writer = $self->{_writer};
my $result = $self->{_results}->{$test};
- my $parser = TAP::Parser->new( { stream => $stream } );
while ( my $line = $parser->next() ) {
if ( $line->is_plan() ) {
$result->[INDEX_TOTAL] = $line->tests_planned();
Index: lib/TAP/Parser.pm
===================================================================
--- lib/TAP/Parser.pm (revision 1131)
+++ lib/TAP/Parser.pm (working copy)
@@ -1851,8 +1851,8 @@
=head1 BUGS
Please report any bugs or feature requests to
-C<[EMAIL PROTECTED]>, or through the web interface at
-L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=TAP-Parser>.
+C<[EMAIL PROTECTED]>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Harness>.
We will be notified, and then you'll automatically be notified of
progress on your bug as we make changes.
Index: lib/TAP/Parser/Scheduler.pm
===================================================================
--- lib/TAP/Parser/Scheduler.pm (revision 1131)
+++ lib/TAP/Parser/Scheduler.pm (working copy)
@@ -113,9 +113,10 @@
sub _expand {
my ( $self, $name, $tests ) = @_;
- $name =~ s{(.)}{
- $1 eq '?' ? '[^/]'
- : $1 eq '*' ? '[^/]*'
+ $name =~ s{(\?|\*\*?|.)}{
+ $1 eq '?' ? '[^/]'
+ : $1 eq '*' ? '[^/]*'
+ : $1 eq '**' ? '.*?'
: quotemeta($1);
}gex;
@@ -227,6 +228,7 @@
return "$indent(undef)\n";
}
elsif ( 'ARRAY' eq ref $rule ) {
+ return unless @$rule;
my $type = ( 'par', 'seq' )[ $depth % 2 ];
return join(
'', "$indent$type:\n",