1use Test::More; 2use FindBin; 3use lib "$FindBin::Bin/../lib"; 4use Data::Dumper; 5use Form::Sensible; 6 7use Form::Sensible::Form; 8 9my $lib_dir = $FindBin::Bin; 10my @dirs = split '/', $lib_dir; 11pop @dirs; 12$lib_dir = join('/', @dirs); 13 14 15my $form = Form::Sensible::Form->new(name=>'test'); 16 17my $username_field = Form::Sensible::Field::Text->new( name=>'username', validation => { regex => qr/^[0-9a-z]*$/ }); 18$form->add_field($username_field); 19 20my $password_field = Form::Sensible::Field::Text->new( name=>'password', 21 render_hints => { field_type => 'password' } ); 22$form->add_field($password_field); 23 24my $submit_button = Form::Sensible::Field::Trigger->new( name => 'submit' ); 25$form->add_field($submit_button); 26 27my $renderer = Form::Sensible->get_renderer('HTML', { fs_template_dir => $lib_dir . '/share/templates' }); 28 29#print Dumper($renderer->include_paths); 30my $output = $renderer->render($form)->complete; 31 32############ same thing - only the 'flat' way. 33 34$form = Form::Sensible->create_form( { 35 name => 'test', 36 fields => [ 37 { 38 field_class => 'Text', 39 name => 'username', 40 validation => { regex => '^[0-9a-z]*$' } 41 }, 42 { 43 field_class => 'Text', 44 name => 'password', 45 render_hints => { field_type => 'password' } 46 }, 47 { 48 field_class => 'Trigger', 49 name => 'submit' 50 } 51 ], 52 } ); 53 54my $renderer2 = Form::Sensible->get_renderer('HTML', { fs_template_dir => $lib_dir . '/share/templates' }); 55 56my $output_2 = $renderer2->render($form)->complete; 57 58ok( $output eq $output_2, "flat creation and programmatic creation produce the same results"); 59 60my $renderer3 = Form::Sensible->get_renderer('HTML', { fs_template_dir => $lib_dir . '/share/templates', base_theme => 'table' }); 61 62my $output_3 = $renderer3->render($form)->complete; 63 64ok( $output_3 =~ /<table/, "Theme selection works"); 65# print $output_3; 66 67#print $output_2; 68 69## Checking that fields that don't accept multiple behave properly 70$form->set_values({ username => ['test','foo'], password => 'test' }); 71 72## here we should check these fields 73is_deeply ({ username => 'test', password => 'test' } , { username => $form->field('username')->value, password => $form->field('password')->value }, 'Additional values on single-value fields are ignored'); 74 75## here we should add some field values 76$form->set_values({ username => 'test', password => 'test' }); 77 78## here we should check these fields 79is_deeply ({ username => 'test', password => 'test' } , { username => $form->field('username')->value, password => $form->field('password')->value }, 'Setting Values behaves properly'); 80 81## here we should make sure proper validation passes 82my $validation_result = $form->validate(); 83is($validation_result->is_valid, 1, "Validates okay"); 84 85## here we should make sure improper validation is handled properly, aka fail for 86## non-passing data 87$form->set_values({ username => '*&#*&@)(*&)', password => 'test' }); 88is_deeply ({ username => '*&#*&@)(*&)', password => 'test' } , { username => $form->field('username')->value, password => $form->field('password')->value }); 89 90$validation_result = $form->validate(); 91isnt($validation_result->is_valid, 1, "Validation fails"); 92 93## here we should render the form, and make sure stuff lines up properly 94 95done_testing(); 96