(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

Reply via email to