summaryrefslogtreecommitdiff
path: root/t/18-depends.t
diff options
context:
space:
mode:
Diffstat (limited to 't/18-depends.t')
-rw-r--r--t/18-depends.t168
1 files changed, 168 insertions, 0 deletions
diff --git a/t/18-depends.t b/t/18-depends.t
new file mode 100644
index 0000000..a94d3bf
--- /dev/null
+++ b/t/18-depends.t
@@ -0,0 +1,168 @@
+use strict;
+use warnings;
+
+use Params::Validate qw(validate validate_pos);
+use Test::More;
+
+{
+ my %spec = (
+ foo => { optional => 1, depends => 'bar' },
+ bar => { optional => 1 },
+ );
+
+ my @args = ( bar => 1 );
+
+ eval { validate( @args, \%spec ) };
+
+ is( $@, q{}, "validate() single depends(1): no depends, positive" );
+
+ @args = ( foo => 1, bar => 1 );
+ eval { validate( @args, \%spec ) };
+
+ is( $@, q{}, "validate() single depends(2): with depends, positive" );
+
+ @args = ( foo => 1 );
+ eval { validate( @args, \%spec ) };
+
+ ok( $@, "validate() single depends(3.a): with depends, negative" );
+ like(
+ $@,
+ qr(^Parameter 'foo' depends on parameter 'bar', which was not given),
+ "validate() single depends(3.b): check error string"
+ );
+}
+
+{
+ my %spec = (
+ foo => { optional => 1, depends => [qw(bar baz)] },
+ bar => { optional => 1 },
+ baz => { optional => 1 },
+ );
+
+ # positive, no depends (single, multiple)
+ my @args = ( bar => 1 );
+ eval { validate( @args, \%spec ) };
+ is(
+ $@, q{},
+ "validate() multiple depends(1): no depends, single arg, positive"
+ );
+
+ @args = ( bar => 1, baz => 1 );
+ eval { validate( @args, \%spec ) };
+
+ is(
+ $@, q{},
+ "validate() multiple depends(2): no depends, multiple arg, positive"
+ );
+
+ @args = ( foo => 1, bar => 1, baz => 1 );
+ eval { validate( @args, \%spec ) };
+
+ is( $@, q{}, "validate() multiple depends(3): with depends, positive" );
+
+ @args = ( foo => 1, bar => 1 );
+ eval { validate( @args, \%spec ) };
+
+ ok(
+ $@,
+ "validate() multiple depends(4.a): with depends, negative, multiple missing"
+ );
+ like(
+ $@,
+ qr(^Parameter 'foo' depends on parameter 'baz', which was not given),
+ "validate() multiple depends (4.b): check error string"
+ );
+
+ @args = ( foo => 1 );
+ eval { validate( @args, \%spec ) };
+
+ ok(
+ $@,
+ "validate() multiple depends(5.a): with depends, negative, multiple missing"
+ );
+ like(
+ $@,
+ qr(^Parameter 'foo' depends on parameter '(bar|baz)', which was not given),
+ "validate() multiple depends (5.b): check error string"
+ );
+}
+
+{
+
+ # bad depends
+ my %spec = (
+ foo => { optional => 1, depends => { 'bar' => 1 } },
+ bar => { optional => 1 },
+ );
+
+ my @args = ( foo => 1 );
+ eval { validate( @args, \%spec ) };
+
+ ok( $@, "validate() bad depends spec (1.a): depends is a hashref" );
+ like(
+ $@,
+ qr(^Arguments to 'depends' must be a scalar or arrayref),
+ "validate() bad depends spec (1.a): check error string"
+ );
+}
+
+{
+ my @spec = ( { optional => 1 } );
+
+ my @args = qw(1);
+ eval { validate_pos( @args, @spec ) };
+
+ is( $@, q{}, "validate_pos() no depends, positive" );
+}
+
+{
+ my @spec = ( { optional => 1, depends => 2 }, { optional => 1 } );
+
+ my @args = qw(1 1);
+ eval { validate_pos( @args, @spec ) };
+
+ is(
+ $@, q{},
+ "validate_pos() single depends (1): with depends, positive"
+ );
+}
+
+{
+ my @spec = (
+ { optional => 1, depends => 4 },
+ { optional => 1 }, { optional => 1 },
+ { optional => 1 }
+ );
+
+ my @args = qw(1 0);
+ eval { validate_pos( @args, @spec ) };
+
+ ok( $@, "validate_pos() single depends (2.a): with depends, negative" );
+ like(
+ $@,
+ qr(^Parameter #1 depends on parameter #4, which was not given),
+ "validate_pos() single depends (2.b): check error"
+ );
+}
+
+{
+ my @spec = (
+ { optional => 1, depends => [ 2, 3 ] },
+ { optional => 1 },
+ 0
+ );
+ my @args = qw(1);
+ eval { validate_pos( @args, @spec ) };
+
+ ok(
+ $@,
+ "validate_pos() multiple depends (1.a): with depends, bad args negative"
+ );
+ like(
+ $@,
+ qr{^Arguments to 'depends' for validate_pos\(\) must be a scalar},
+ "validate_pos() multiple depends (1.b): check error"
+ );
+}
+
+done_testing();