Test2::...irstTool(3)
π Test2::Manual::Tooling::FirstTool(3) π
okay bestie, this page is from the User Contributed Perl Documentation, and it's literally your tutorial for writing your very first Test2 tool by cloning the ok() tool. periodt. π«Ά
β¨ NAME β¨
Test2::Manual::Tooling::FirstTool β write your first tool with Test2. π
π DESCRIPTION π
This tutorial helps you write your very first tool by cloning the ok() tool. No cap. π¦
π₯ COMPLETE CODE UP FRONT π₯
Here's the whole thing up front so you can see the final vibe: β¨
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;
πΈ LINE BY LINE πΈ
sub ok($;$@) {
In this case we're 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're 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 usecloneto 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. slay. β
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;
π¦ CONTEXT OBJECT DOCUMENTATION π¦
Test2::API::Context is the place to read up on what methods the context provides. Go get that lore, bestie. π
π SEE ALSO π
Test2::Manualβ primary index of the manual.
π SOURCE π
The source code repository for Test2-Manual can be found at https://github.com/Test-More/test-more/. π«Ά
π MAINTAINERS π
Chad Granum <exodist@cpan.org>
β AUTHORS β
Chad Granum <exodist@cpan.org>
π COPYRIGHT π
Copyright 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/
and that's the whole page, bestie π it's from perl v5.42.0, dated 2025-07-28, and it's Test2::...irstTool(3). stay iconic β¨
π¦ where this page comes from
- opensuse-leap 16.0: perl-Test-Simple 1.302214-bp160.1.2 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms