diff options
Diffstat (limited to 't/18-depends.t')
-rw-r--r-- | t/18-depends.t | 168 |
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(); |