The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use Test::More;

use Data::Validator;

my $v = Data::Validator->new(
    foo => { },
    bar => { },
    baz => { optional => 1 }
);
isa_ok $v, 'Data::Validator';

my $args = $v->validate({ foo => 1, bar => 2 });
is_deeply $args, { foo => 1, bar => 2 };

$args = $v->validate({ foo => 1, bar => 2, baz => 3 });
is_deeply $args, { foo => 1, bar => 2, baz => 3 };

note 'failing cases';

eval {
    $v->validate();
};
like $@, qr/Missing parameter: 'foo'/, 'missing parameters';
like $@, qr/Missing parameter: 'bar'/, 'missing parameters';

eval {
    $v->validate(baz => 1);
};
like $@, qr/Missing parameter: 'foo'/, 'missing parameters';
like $@, qr/Missing parameter: 'bar'/, 'missing parameters';

eval {
    $v->validate(foo => 1);
};
like $@, qr/Missing parameter: 'bar'/, 'missing parameters';
unlike $@, qr/Missing parameter: 'foo'/, 'missing parameters';

eval {
    $v->validate(bar => 1);
};
like $@, qr/Missing parameter: 'foo'/, 'missing parameters';
unlike $@, qr/Missing parameter: 'bar'/, 'missing parameters';

done_testing;