logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

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

Authors

       Chad Granum <exodist@cpan.org>

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;

Context Object Documentation

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

Description

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

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 MUSTNOT 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;

Maintainers

       Chad Granum <exodist@cpan.org>

Name

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

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

See Also