NAME
Test::Lazy::Template
SYNOPSIS
Build a template for running a similar set of tests repeatedly.
The purpose of this module is to provide a convenient way of testing a set of initial conditions in different ways.
The best way to show this is in an example:
# Template up the intial condition template.
my $template = new Test::Lazy::Template([
[ "qw/1/" ],
[ "qw/a/" ],
[ "qw/apple/" ],
[ "qw/2/" ],
[ "qw/0/" ],
[ "qw/-1/" ],
[ "map { \$_ => \$_ * 2 } qw/0 1 2 3 4/" ],
]);
# Run some different tests.
# NOTE: Don't have to use '%?' if the statement will run without modification.
$template->test("defined(%?)" => ok => undef);
$template->test("length(%?) >= 1" => ok => undef);
$template->test("length(%?)" => '>=' => 1);
$template->test("length(%?)" => '<' => 10);
$template->test([
[ '%?' => is => 1 ],
[ is => 'a' ],
[ is => 'apple' ],
[ is => 2 ],
[ is => 0 ],
[ is => is => -1 ],
[ is => { 0 => 0, 1 => 2, 2 => 4, 3 => 6, 4 => 8 } ],
]);
METHODS
Test::Lazy::Template->new( <template> )
Test::Lazy::Template->new( <test>, <test>, ..., <test> )
Create a new Test::Lazy::Template
object using the giving test specification.
If <template> is a SCALAR reference, then new will split <template> on each newline, ignoring empty lines and lines beginning with a pound (#).
# You could do something like this:
my $template = template(\<<_END_);
qw/1/
qw/a/
qw/apple/
qw/2/
qw/0/
qw/-1/
# Let's test this one too.
map { \$_ => \$_ * 2 } qw/0 1 2 3 4/
_END_
Returns the new Test::Lazy::Template
object
$template->test( <template> )
For each test in $template, modify and run each the test according to the corresponding entry in <template>.
$template->test( <test> )
Modify and then run each test in $template by using <test> to complete each test's specification.