1use strict; 2use warnings; 3 4# base the package name on the test file path 5# to stop 'redefined' warnings under Test::Aggregate::Nested 6package My::Nested::Validators::Callback; 7 8sub cb { 9 my $value = shift; 10 my $params = shift; 11 ::ok(1) if grep { $value eq $_ ? 1 : 0 } qw/ 1 0 a /; 12 ::ok( ref($params) eq 'HASH' && keys %$params, 'params hashref is passed' ); 13 return 1; 14} 15 16package main; 17 18use Test::More tests => 11; 19 20use HTML::FormFu; 21 22my $form = HTML::FormFu->new; 23 24$form->auto_fieldset( { nested_name => 'foo' } ); 25 26$form->element('Text')->name('bar')->validator('Callback') 27 ->callback( \&My::Nested::Validators::Callback::cb ); 28 29$form->element('Text')->name('baz'); 30 31# attached via form 32$form->validator( 33 { type => 'Callback', 34 name => 'foo.baz', 35 callback => 'My::Nested::Validators::Callback::cb', 36 } ); 37 38# Valid 39{ 40 $form->process( 41 { 'foo.bar' => 1, 42 'foo.baz' => [ 0, 'a', 'b' ], 43 } ); 44 45 ok( $form->valid('foo.bar') ); 46 ok( $form->valid('foo.baz') ); 47 48 is( $form->param('foo.bar'), 1 ); 49 50 is_deeply( [ $form->param('foo.baz') ], [ 0, 'a', 'b' ] ); 51} 52