Perl Diver 2.31
Main Environment Variables Perl Default Values Perl Config - Summary Perl Config - Full Installed Modules List Directory uptime Docs

Module Documentation
Details and documentation about a specific module, including version and documentation (if available). Note that while links to perldoc.com and search.cpan.org are provided, the module may be part of a larger distribution. If you reach a File Not Found page on either site, please try the parent module.

Test2::Manual::Tooling::FirstTool

Name Test2::Manual::Tooling::FirstTool
Version 0.000144
Located at /usr/local/share/perl5
File /usr/local/share/perl5/Test2/Manual/Tooling/FirstTool.pm
Is Core No
Search CPAN for this module Test2::Manual::Tooling::FirstTool
Documentation Test2::Manual::Tooling::FirstTool
Module Details Test2::Manual::Tooling::FirstTool

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 the Test2::Tools::Basic manpage.

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 the Test2::Event::Pass manpage 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 the Test2::Event::Fail manpage 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

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


SEE ALSO

the Test2::Manual manpage - 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


AUTHORS

Chad Granum <exodist@cpan.org>Chad Granum


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 Diver brought to you by ScriptSolutions.com © 1997- 2024