dwww Home | Manual pages | Find package

Test2:...rstTool(3perl) Perl Programmers Reference GuideTest2:...rstTool(3perl)

NAME
       Test2::Manual::Tooling::FirstTool - Write your first tool with Test2.

DESCRIPTION
       This tutorial will help you write your very first tool by cloning the
       ok() tool.

COMPLETE CODE UP FRONT
           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  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;

CONTEXT OBJECT DOCUMENTATION
       Test2::API::Context is the place to read up on what methods the  context
       provides.

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/Test2-Suite/.

MAINTAINERS
       Chad Granum <exodist@cpan.org>

AUTHORS
       Chad Granum <exodist@cpan.org>

COPYRIGHT
       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/

perl v5.40.1                       2026-08-30           Test2:...rstTool(3perl)

Generated by dwww version 1.16 on Sat Oct 3 06:00:43 CEST 2026.