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