Test2::Manual::Tooling::FirstTool - Write your first tool with Test2.
This tutorial will help you write your very first tool by cloning the
"ok()" tool.
package Test2::Tools::MyOk;
use strict;
use warnings;
use Test2::API qw/context/;
use base 'Exporter';
our @EXPORT = qw/ok/;
sub ok($;$@) {
my ($bool, $name, @diag) = @_;
my $ctx = context();
return $ctx->pass_and_release($name) if $bool;
return $ctx->fail_and_release($name, @diag);
}
1;
- sub ok($;$@) {
- In this case we are emulating the "ok()"
function exported by Test2::Tools::Basic.
"ok()" and similar test
tools use prototypes to enforce argument parsing. Your test tools do not
necessarily need prototypes, like any perl function you need to make the
decision based on how it is used.
The prototype requires at least 1 argument, which will be
forced into a scalar context. The second argument is optional, and is
also forced to be scalar, it is the name of the test. Any remaining
arguments are treated as diagnostics messages that will only be used if
the test failed.
- my ($bool, $name, @diag) = @_;
- This line does not need much explanation, we are simply grabbing the
args.
- my $ctx = context();
- This is a vital line in ALL tools. The context object is the
primary API for test tools. You MUST get a context if you want to
issue any events, such as making assertions. Further, the context is
responsible for making sure failures are attributed to the correct file
and line number.
Note: A test function MUST always release the
context when it is done, you cannot simply let it fall out of scope and
be garbage collected. Test2 does a pretty good job of yelling at you if
you make this mistake.
Note: You MUST NOT ever store or pass around a
real context object. If you wish to hold on to a context for any
reason you must use clone to make a copy "my $copy
= $ctx->clone". The copy may be passed around or stored,
but the original MUST be released when you are done with it.
- return $ctx->pass_and_release($name) if $bool;
- When $bool is true, this line uses the context
object to issue a Test2::Event::Pass event. Along with issuing the event
this will also release the context object and return true.
This is short form for:
if($bool) {
$ctx->pass($name);
$ctx->release;
return 1;
}
- return $ctx->fail_and_release($name, @diag);
- This line issues a Test2::Event::Fail event, releases the context object,
and returns false. The fail event will include any diagnostics messages
from the @diag array.
This is short form for:
$ctx->fail($name, @diag);
$ctx->release;
return 0;
Test2::API::Context is the place to read up on what methods the context
provides.
Test2::Manual - Primary index of the manual.
The source code repository for Test2-Manual can be found at
https://github.com/Test-More/Test2-Suite/.
- Chad Granum <exodist@cpan.org>
- Chad Granum <exodist@cpan.org>
Copyright 2018 Chad Granum <exodist@cpan.org>.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/