# This script tests validating keys with multiple data use strict; use lib ('.','../t'); $^W = 1; use Test::More tests => 8; my $input_hash = { single_value => ' Just One ', multi_values => [' One ', ' Big ', ' Happy ', ' Family '], re_multi_test => [qw/at the circus/], constraint_multi_test => [qw/12345 22234 oops/], }; use Data::FormValidator; my $input_profile = { required => [qw/single_value multi_values re_multi_test constraint_multi_test/], filters => [qw/trim/], field_filters => { single_value => 'lc', multi_values => 'uc', }, field_filter_regexp_map => { '/_multi_test$/' => 'ucfirst', }, constraints => { constraint_multi_test => 'zip', }, }; my $validator = new Data::FormValidator({default => $input_profile}); my ($valids, $missings, $invalids, $unknowns); eval{ ($valids, $missings, $invalids, $unknowns) = $validator->validate($input_hash, 'default'); }; is($valids->{single_value},'just one', 'inconditional filters still work with single values' ); is(lc $valids->{multi_values}->[0],lc 'one', 'inconditional filters work with multi values' ); is($valids->{multi_values}->[0],'ONE', 'field filters work with multiple values' ); is($valids->{re_multi_test}->[0] ,'At', 'Test the filters applied to multiple values by RE work' ); ok(!$valids->{constraint_multi_test}, 'If any of the values fail the constraint, the field becomes invalid' ); my $r; eval { $r = Data::FormValidator->check({ undef_multi => [undef] }, { required => 'undef_multi' }) }; diag "error: $@" if $@; ok($r->missing('undef_multi'), 'multi-valued field containing only undef should be missing'); my $v; eval { $v = $r->valid('undef_multi'); }; diag "error: $@" if $@; ok(!$v, 'multiple valued fields containing only undefined values should not be valid'); ### eval { $r = Data::FormValidator->check({ cc_type => ['Check'], }, { required => 'cc_type', dependencies => { cc_type => { Check => [qw( cc_num )], Visa => [qw( cc_num cc_exp cc_name )], }, }, }) }; diag "error: $@" if $@; ok($r->missing('cc_num'), 'a single valued array should still trigger the dependency check');