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

use 5.010;
use strict;
use warnings;

use Perinci::Sub::Wrapper qw(wrap_sub);
use Test::More 0.96;
use Test::Perinci::Sub::Wrapper qw(test_wrap);

my ($sub, $meta);

$sub = sub {
    my %args = @_;
    for (keys %args) {
        delete $args{$_} if /^-/; # strip special arguments
    }
    [200,"OK",\%args];
};
$meta = {v=>1.1, args=>{a=>{}, b=>{}, c=>{}}, curry=>{a=>10}};
test_wrap(
    name        => 'a is curried #1',
    wrap_args   => {sub => $sub, meta => $meta},
    wrap_status => 200,
    call_argsr  => [],
    call_status => 200,
    call_res    => [200, "OK", {a=>10}],
);
test_wrap(
    name        => 'a is curried #2',
    wrap_args   => {sub => $sub, meta => $meta},
    wrap_status => 200,
    call_argsr  => [b=>20, c=>30],
    call_status => 200,
    call_res    => [200, "OK", {a=>10, b=>20, c=>30}],
);
test_wrap(
    name        => 'a cannot be set again',
    wrap_args   => {sub => $sub, meta => $meta},
    wrap_status => 200,
    call_argsr  => [a=>5],
    call_status => 400,
);

done_testing();