The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Gen::Test::Rinci::FuncResult - Generate function to test a function

VERSION

This document describes version 0.04 of Gen::Test::Rinci::FuncResult (from Perl distribution Gen-Test-Rinci-FuncResult), released on 2014-05-17.

SYNOPSIS

 use Gen::Test::Rinci::FuncResult qw(gen_test_func);
 use Test::More;

 sub divide {
     my %args = @_;
     my ($a, $b) = ($args{a}, $args{b});
     return [500, "undefined"] if $a == 0 && $b == 0;
     [200, "OK", $a/$b];
 }

 gen_test_func(name => 'test_divide', func => \&divide);

 test_divide(args=>{a=>6, b=>3}, result=>2);
 test_divide(args=>{a=>6, b=>0}, dies=>1);
 test_divide(args=>{a=>0, b=>0}, status=>500);
 done_testing;

DESCRIPTION

FUNCTIONS

gen_test_func(%args) -> [status, msg, result, meta]

Generate a test function for a function.

This function (A) will generate a function (B).

A accepts, among others, the name or the reference to the function that you want to test (T) and the name of the generated function, B.

B will run T once with some specified arguments, catch exception, and test its result. The result is expected to be an enveloped result (see the documentation of Rinci::function for more details about enveloped result).

B will accept the following arguments:

  • name (str)

      Name of the test. Will default to "T (ARGS...)" to show the name of the target
      function and the arguments that it is called with.
  • args (hash or array)

      Argument to feed to function T.
  • dies (bool, default => 0)

      Whether function T should die when run. If set to 1, further tests will not be
      done except the test that function dies.
  • status (int, default => 200)

      Will test the result's status code.
  • result (any)

      If specified, will test the actual result of the function.
  • run (code)

      Instead of running function T with C<args>, will execute this code instead.
  • posttest (code)

      Run this code for additional tests.

Todo:

  • Handle function with result_naked => 1.

Arguments ('*' denotes required arguments):

  • func* => code

    Target function to test.

  • install => bool (default: 1)

    Whether to install the function.

  • name* => str

    Name of the test function to generate (B).

    Can be fully qualified, e.g. Pkg::SubPkg::funcname or unqualified funcname (where the package will be taken from the package argument). Relevant for when installing the function.

  • package => any

    Perl package to put this function in.

    Relevant only when installing the function.

Return value:

Returns an enveloped result (an array).

First element (status) is an integer containing HTTP status code (200 means OK, 4xx caller error, 5xx function error). Second element (msg) is a string containing error message, or 'OK' if status is 200. Third element (result) is optional, the actual result. Fourth element (meta) is called result metadata and is optional, a hash that contains extra information.

FAQ

SEE ALSO

Rinci

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Gen-Test-Rinci-FuncResult.

SOURCE

Source repository is at https://github.com/sharyanto/perl-Gen-Test-Rinci-FuncResult.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Gen-Test-Rinci-FuncResult

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

Steven Haryanto <stevenharyanto@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Steven Haryanto.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.