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