(Helps if I send this from a subscribed address):
From http://use.perl.org/~Ovid/journal/39193
The latest developer release of Test::More allows subtests. Subtests are great
in that they solve a lot of problems in advanced Perl testing, but they have
required a change in Test::Builder. Previously you could do stuff like this:
package Test::StringReverse;
use base 'Test::Builder::Module';
our @EXPORT = qw(is_reversed);
my $BUILDER = Test::Builder->new;
sub is_reversed ($$;$) {
my ( $have, $want, $name ) = @_;
my $passed = $want eq scalar reverse $name;
$BUILDER->ok($passed, $name);
$BUILDER->diag(<<" END_DIAG") if not $passed;
have: $have
want: $want
END_DIAG
return $passed;
}
1;
And
you've have a simple (untested;) test for whether or not strings are
reversed. The reason that worked is that Test::Builder->new used to
return a singleton. This is no longer true. If someone uses your test library
in a subtest, the above code would break. Instead, you want to do this:
sub is_reversed ($$;$) {
my ( $have, $want, $name ) = @_;
my $passed = $want eq scalar reverse $name;
my $builder = __PACKAGE__->builder;
$builder->ok($passed, $name);
$builder->diag(<<" END_DIAG") if not $passed;
have: $have
want: $want
END_DIAG
return $passed;
}
It's a minor change, it's completely backwards-compatible and it supports
subtests.
Cheers,
Ovid
--
Buy the book - http://www.oreilly.com/catalog/perlhks/
Tech blog - http://use.perl.org/~Ovid/journal/
Twitter - http://twitter.com/OvidPerl
Official Perl 6 Wiki - http://www.perlfoundation.org/perl6
--
Buy the book - http://www.oreilly.com/catalog/perlhks/
Tech blog - http://use.perl.org/~Ovid/journal/
Twitter - http://twitter.com/OvidPerl
Official Perl 6 Wiki - http://www.perlfoundation.org/perl6