Validate: Rename "values"->"elems", repurpose "values" to validate hash values
I'm breaking stuff left and right while I still can.
Idea: "key_names" validation?
Idea: "tuple" validation that works like "keys" but for arrays.
(i.e. { tuple => { $index => $schema } }, could make "missing" and
"unknown" work for arrays, too)
This commit is contained in:
parent
fa24ca53e3
commit
3fad7feec3
2 changed files with 82 additions and 51 deletions
13
t/validate.t
13
t/validate.t
|
|
@ -19,7 +19,7 @@ my %validations = (
|
|||
neverfails => { onerror => 'err' },
|
||||
doublefunc => [ func => sub { $_[0] == 0 }, func => sub { $_[0] = 2; 1; } ],
|
||||
revnum => { type => 'array', sort => sub($x,$y) { $y <=> $x } },
|
||||
uniquelength => { type => 'array', values => { type => 'array' }, unique => sub { scalar @{$_[0]} } },
|
||||
uniquelength => { elems => { type => 'array' }, unique => sub { scalar @{$_[0]} } },
|
||||
person => {
|
||||
type => 'hash',
|
||||
unknown => 'pass',
|
||||
|
|
@ -85,8 +85,8 @@ f { type => 'array' }, 1, { validation => 'type', expected => 'array', got => 's
|
|||
t { type => 'array' }, [], [];
|
||||
t { type => 'array' }, [undef,1,2,{}], [undef,1,2,{}];
|
||||
t { type => 'array', scalar => 1 }, 1, [1];
|
||||
f { type => 'array', values => {} }, [undef], { validation => 'values', errors => [{ index => 0, validation => 'required' }] }, "[0]: required value missing";
|
||||
t { type => 'array', values => {} }, [' a '], ['a'];
|
||||
f { type => 'array', elems => {} }, [undef], { validation => 'elems', errors => [{ index => 0, validation => 'required' }] }, "[0]: required value missing";
|
||||
t { type => 'array', elems => {} }, [' a '], ['a'];
|
||||
t { type => 'array', sort => 'str' }, [qw/20 100 3/], [qw/100 20 3/];
|
||||
t { type => 'array', sort => 'num' }, [qw/20 100 3/], [qw/3 20 100/];
|
||||
t { revnum => 1 }, [qw/20 100 3/], [qw/100 20 3/];
|
||||
|
|
@ -97,12 +97,12 @@ f { type => 'array', unique => 1 }, [qw/3 1 3/], { validation => 'unique', index
|
|||
t { uniquelength => 1 }, [[],[1],[1,2]], [[],[1],[1,2]];
|
||||
f { uniquelength => 1 }, [[],[1],[2]], { validation => 'unique', index_a => 1, value_a => [1], index_b => 2, value_b => [2], key => 1 }, q{[2] value '[1]' duplicated};
|
||||
t { type => 'array', setundef => 1 }, [], undef;
|
||||
t { type => 'array', values => { type => 'any', setundef => 1 } }, [[]], [undef];
|
||||
t { type => 'array', elems => { type => 'any', setundef => 1 } }, [[]], [undef];
|
||||
|
||||
# hashes
|
||||
f { type => 'hash' }, [], { validation => 'type', expected => 'hash', got => 'array' }, "invalid type, expected 'hash' but got 'array'";
|
||||
f { type => 'hash' }, 'a', { validation => 'type', expected => 'hash', got => 'scalar' }, "invalid type, expected 'hash' but got 'scalar'";
|
||||
t { type => 'hash' }, {a=>[],b=>undef,c=>{}}, {};
|
||||
t { type => 'hash' }, {a=>[],b=>undef,c=>{}}, {a=>[],b=>undef,c=>{}};
|
||||
f { type => 'hash', keys => { a=>{} } }, {}, { validation => 'keys', errors => [{ key => 'a', validation => 'required' }] }, '.a: required value missing';
|
||||
t { type => 'hash', keys => { a=>{missing=>'ignore'} } }, {}, {};
|
||||
t { type => 'hash', keys => { a=>{default=>undef} } }, {}, {a=>undef};
|
||||
|
|
@ -120,6 +120,9 @@ t [ keys => { a => {} }, keys => { b => {} } ], {a=>1, b=>2}, {a=>1, b=>2};
|
|||
f [ keys => { a => {} }, keys => { b => {} } ], {a=>1}, { validation => 'keys', errors => [{ key => 'b', validation => 'required' }] }, '.b: required value missing';
|
||||
f [ keys => { a => {} }, keys => { a => { int => 1 } } ], {a=>'abc'}, { validation => 'keys', errors => [{ key => 'a', validation => 'int', got => 'abc' }] }, ".a: failed validation 'int'";
|
||||
|
||||
t { values => { int => 1 } }, { a => -1, b => 1 }, { a => -1, b => 1 };
|
||||
f { values => { int => 1 } }, { a => undef }, { validation => 'values', errors => [{ key => 'a', validation => 'required' }] }, '.a: required value missing';
|
||||
|
||||
# default validations
|
||||
f { minlength => 3 }, 'ab', { validation => 'minlength', expected => 3, got => 2 }, "failed validation 'minlength'";
|
||||
t { minlength => 3 }, 'abc', 'abc';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue