The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.