#!/usr/bin/env perl
my
$input_profile
= {
required
=> [
'my_zipcode_field'
],
constraints
=> {
my_zipcode_field
=> [
'zip'
,
{
constraint
=>
'/^406/'
,
name
=>
'starts_with_406'
,
}
],
},
};
my
$validator
= new Data::FormValidator( {
default
=>
$input_profile
} );
my
$input_hashref
= {
my_zipcode_field
=>
'402015'
,
};
my
(
$valids
,
$missings
,
$invalids
,
$unknowns
);
eval
{
(
$valids
,
$missings
,
$invalids
,
$unknowns
) =
$validator
->validate(
$input_hashref
,
'default'
);
};
ok( !$@,
'survived eval'
);
ok( (
grep
{ (
ref
$_
) eq
'ARRAY'
}
@$invalids
) );
my
@zip_failures
;
for
(
@$invalids
)
{
if
(
ref
$_
eq
'ARRAY'
)
{
if
(
scalar
@$_
== 3 )
{
@zip_failures
=
@$_
;
ok(1);
last
;
}
}
}
my
$t
=
shift
@zip_failures
;
ok(
$t
eq
'my_zipcode_field'
);
ok( eq_set( \
@zip_failures
, [
qw/zip starts_with_406/
] ) );
my
%data
= (
multiple
=>
'to fail'
,
single
=>
'to pass'
,
);
my
%profile
= (
required
=> [
qw/
multiple
single
/
],
constraints
=> {
multiple
=> [
{
name
=>
'constraint_1'
,
constraint
=>
qr/\w/
},
{
name
=>
'constraint_2'
,
constraint
=>
qr/\d/
},
],
},
);
my
$results
= Data::FormValidator->check( \
%data
, \
%profile
);
ok( !
$results
->valid(
'multiple'
),
"expect 'multiple' not to appear in valid"
);
is_deeply(
$results
->invalid(
'multiple'
),
[
'constraint_2'
],
"list of failed constraints for 'multiple'"
);
is(
$results
->valid(
'single'
),
'to pass'
,
"single is valid"
);