NAME

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

VERSION

version 0.02

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

FAQ

SEE ALSO

Rinci

AUTHOR

Steven Haryanto <stevenharyanto@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 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.

FUNCTIONS

None are exported by default, but they are exportable.

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

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.