1use strict; 2use warnings; 3 4use Test::More tests => 36; 5 6use HTML::FormFu; 7 8my $form = HTML::FormFu->new( 9 { tt_args => { INCLUDE_PATH => 'share/templates/tt/xhtml' } } ); 10 11$form->element('Checkbox')->name('bar')->value('y'); 12 13$form->auto_fieldset(1); 14 15$form->default_model('HashRef'); 16 17$form->populate( 18 { elements => [ 19 { type => "DateTime", 20 name => "datetime", 21 auto_inflate => 1, 22 year => { list => [1999] } 23 }, 24 { name => "inflator", 25 deflator => { type => 'Strftime', strftime => '%F %H:%M' }, 26 inflator => 27 { type => "DateTime", parser => { strptime => '%F' } } 28 }, 29 { type => "Repeatable", 30 nested_name => "many", 31 elements => [ 32 { name => "id" }, 33 { type => "Block", 34 name => "nested", 35 elements => [ { type => "Text", name => "foo" } ] } ] 36 }, 37 { type => "Select", 38 name => "single-select", 39 options => [ [qw(1 foo)], [qw(2 bar)] ] 40 }, 41 { type => "Select", 42 name => "multi-select", 43 options => [ [qw(1 foo)], [qw(2 bar)] ] 44 }, 45 { type => "Block", 46 nested_name => "nested", 47 elements => [ { type => "Text", name => "foo" } ] 48 }, 49 { type => "Multi", 50 name => "address", 51 elements => [ { name => "street" }, { name => "number" } ] 52 }, 53 { type => "Multi", 54 name => "address-split", 55 elements => [ { name => "street" }, { name => "number" } ], 56 deflators => [ { type => "CompoundSplit" } ] 57 }, 58 { type => "SimpleTable", 59 rows => [ [ { name => "table1" } ] ] } ] } ); 60 61for ( 0 .. 1 ) { 62 63 $form->auto_fieldset($_); 64 $form->model->default_values( 65 { datetime => '30-08-1999 22:00', 66 bar => 'y', 67 many => [ { id => 1, foo => "bar" }, { id => 2, foo => "baz" } ], 68 'single-select' => 1, 69 'inflator' => '2008-09-22', 70 'multi-select' => [ 1, 2 ], 71 nested => { foo => "bar" }, 72 address => { street => "Lombardstreet", number => 22 }, 73 'address-split' => "Lombardstreet 22", 74 table1 => "test" 75 } ); 76 77 $form->process; 78 79 like( $form->get_field('datetime_minute'), 80 qr/<option value="00" selected="selected">00<\/option>/ ); 81 like( $form->get_field('datetime_hour'), 82 qr/<option value="22" selected="selected">22<\/option>/ ); 83 like( $form->get_field('datetime_year'), 84 qr/<option value="1999" selected="selected">1999<\/option>/ ); 85 86 like( $form->get_field('bar'), qr/value="y"/ ); 87 like( $form->get_field('bar'), qr/checked="checked"/ ); 88 89 like( $form->get_field('single-select'), 90 qr/value="1" selected="selected"/ ); 91 like( $form->get_field('single-select'), qr/value="2">/ ); 92 93 like( $form->get_field('multi-select'), qr/value="1" selected="selected"/ ); 94 like( $form->get_field('multi-select'), qr/value="2" selected="selected"/ ); 95 96 like( $form->get_field('address'), 97 qr/name="address.street" type="text" value="Lombardstreet"/ ); 98 like( $form->get_field('address'), 99 qr/name="address.number" type="text" value="22"/ ); 100 101 like( $form->get_field('address-split'), 102 qr/name="address-split.street" type="text" value="Lombardstreet"/ ); 103 like( $form->get_field('address-split'), 104 qr/name="address-split.number" type="text" value="22"/ ); 105 106 like( $form->get_field('table1'), 107 qr/name="table1" type="text" value="test"/ ); 108 109 like( 110 $form->get_all_element( { nested_name => 'many' } ), 111 qr/name="many_1.id" type="text" value="1"/ 112 ); 113 like( 114 $form->get_all_element( { nested_name => 'many' } ), 115 qr/name="many_2.id" type="text" value="2"/ 116 ); 117 like( 118 $form->get_all_element( { nested_name => 'many' } ), 119 qr/name="many_1.foo" type="text" value="bar"/ 120 ); 121 like( 122 $form->get_all_element( { nested_name => 'many' } ), 123 qr/name="many_2.foo" type="text" value="baz"/ 124 ); 125 126} 127