The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

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.