diff options
Diffstat (limited to 't/17-callbacks.t')
-rw-r--r-- | t/17-callbacks.t | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/t/17-callbacks.t b/t/17-callbacks.t new file mode 100644 index 0000000..e06a867 --- /dev/null +++ b/t/17-callbacks.t @@ -0,0 +1,78 @@ +use strict; +use warnings; + +use Params::Validate qw(validate validate_pos SCALAR); +use Test::More; + +{ + my @p = ( foo => 1, bar => 2 ); + + eval { + validate( + @p, { + foo => { + type => SCALAR, + callbacks => { + 'bigger than bar' => sub { $_[0] > $_[1]->{bar} } + }, + }, + bar => { type => SCALAR }, + } + ); + }; + + like( $@, qr/bigger than bar/ ); + + $p[1] = 3; + eval { + validate( + @p, { + foo => { + type => SCALAR, + callbacks => { + 'bigger than bar' => sub { $_[0] > $_[1]->{bar} } + }, + }, + bar => { type => SCALAR }, + } + ); + }; + + is( $@, q{} ); +} + +{ + my @p = ( 1, 2, 3 ); + eval { + validate_pos( + @p, { + type => SCALAR, + callbacks => { + 'bigger than [1]' => sub { $_[0] > $_[1]->[1] } + } + }, + { type => SCALAR }, + { type => SCALAR }, + ); + }; + + like( $@, qr/bigger than \[1\]/ ); + + $p[0] = 5; + eval { + validate_pos( + @p, { + type => SCALAR, + callbacks => { + 'bigger than [1]' => sub { $_[0] > $_[1]->[1] } + } + }, + { type => SCALAR }, + { type => SCALAR }, + ); + }; + + is( $@, q{} ); +} + +done_testing(); |