1#!/usr/bin/perl -w 2 3use strict; 4 5use Params::Validate qw(validate validate_pos); 6use Test::More tests => 19; 7 8{ 9 my %spec = ( foo => { optional => 1, depends => 'bar' }, 10 bar => { optional => 1 }, 11 ); 12 13 my @args = ( bar => 1 ); 14 15 eval { validate( @args,\%spec ) }; 16 17 is( $@, q{}, "validate() single depends(1): no depends, positive" ); 18 19 @args = ( foo => 1, bar => 1 ); 20 eval { validate( @args,\%spec ) }; 21 22 is( $@, q{}, "validate() single depends(2): with depends, positive" ); 23 24 @args = ( foo => 1 ); 25 eval { validate( @args, \%spec ) }; 26 27 ok( $@, "validate() single depends(3.a): with depends, negative" ); 28 like( $@, 29 qr(^Parameter 'foo' depends on parameter 'bar', which was not given), 30 "validate() single depends(3.b): check error string" ); 31} 32 33{ 34 my %spec = ( foo => { optional => 1, depends => [ qw(bar baz) ] }, 35 bar => { optional => 1 }, 36 baz => { optional => 1 }, 37 ); 38 39 # positive, no depends (single, multiple) 40 my @args = ( bar => 1 ); 41 eval { validate( @args, \%spec ) }; 42 is( $@, q{}, "validate() multiple depends(1): no depends, single arg, positive" ); 43 44 @args = ( bar => 1, baz => 1 ); 45 eval { validate( @args, \%spec ) }; 46 47 is( $@, q{}, 48 "validate() multiple depends(2): no depends, multiple arg, positive" ); 49 50 @args = ( foo => 1, bar => 1, baz => 1 ); 51 eval { validate( @args, \%spec ) }; 52 53 is( $@, q{}, "validate() multiple depends(3): with depends, positive" ); 54 55 @args = ( foo => 1, bar => 1 ); 56 eval { validate( @args, \%spec ) }; 57 58 ok( $@, "validate() multiple depends(4.a): with depends, negative, multiple missing" ); 59 like( $@, 60 qr(^Parameter 'foo' depends on parameter 'baz', which was not given), 61 "validate() multiple depends (4.b): check error string" ); 62 63 @args = ( foo => 1 ); 64 eval { validate( @args, \%spec ) }; 65 66 ok( $@, "validate() multiple depends(5.a): with depends, negative, multiple missing" ); 67 like( $@, 68 qr(^Parameter 'foo' depends on parameter '(bar|baz)', which was not given), 69 "validate() multiple depends (5.b): check error string" ); 70} 71 72{ 73 # bad depends 74 my %spec = ( foo => { optional => 1, depends => { 'bar' => 1 } }, 75 bar => { optional => 1 }, 76 ); 77 78 my @args = ( foo => 1 ); 79 eval { validate( @args, \%spec ) }; 80 81 ok( $@, "validate() bad depends spec (1.a): depends is a hashref" ); 82 like( $@, 83 qr(^Arguments to 'depends' must be a scalar or arrayref), 84 "validate() bad depends spec (1.a): check error string" ); 85} 86 87{ 88 my @spec = ( { optional => 1 } ); 89 90 my @args = qw(1); 91 eval { validate_pos( @args, @spec ) }; 92 93 is( $@, q{}, "validate_pos() no depends, positive" ); 94} 95 96{ 97 my @spec = ( { optional => 1, depends => 2 }, {optional => 1} ); 98 99 my @args = qw(1 1); 100 eval { validate_pos( @args, @spec ) }; 101 102 is( $@, q{}, "validate_pos() single depends (1): with depends, positive" ); 103} 104 105{ 106 my @spec = ( { optional => 1, depends => 4 }, 107 { optional => 1 }, { optional => 1 }, 108 { optional => 1 } ); 109 110 my @args = qw(1 0); 111 eval { validate_pos( @args, @spec ) }; 112 113 ok( $@, "validate_pos() single depends (2.a): with depends, negative" ); 114 like( $@, 115 qr(^Parameter #1 depends on parameter #4, which was not given), 116 "validate_pos() single depends (2.b): check error" ); 117} 118 119{ 120 my @spec = ( { optional => 1, depends => [ 2, 3 ] }, 121 { optional => 1 }, 122 0 123 ); 124 my @args = qw(1); 125 eval { validate_pos( @args, @spec ) }; 126 127 ok( $@, "validate_pos() multiple depends (1.a): with depends, bad args negative" ); 128 like( $@, 129 qr{^Arguments to 'depends' for validate_pos\(\) must be a scalar}, 130 "validate_pos() multiple depends (1.b): check error" ); 131} 132