summaryrefslogtreecommitdiff
path: root/t/17-callbacks.t
diff options
context:
space:
mode:
Diffstat (limited to 't/17-callbacks.t')
-rw-r--r--t/17-callbacks.t78
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();