From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use Test::More tests => 10;
{
package Test::Form;
extends 'HTML::FormHandler';
has '+name' => ( default => 'renderform' );
has_field 'test_field' => (
type => 'Text',
label => 'TEST',
id => 'f99',
);
has_field 'fruit' => ( type => 'Select' );
has_field 'vegetables' => ( type => 'Multiple' );
has_field 'active' => ( type => 'Checkbox' );
has_field 'comments' => ( type => 'TextArea' );
has_field 'hidden' => ( type => 'Hidden' );
has_field 'selected' => ( type => 'Boolean' );
has_field 'start_date' => ( type => 'DateTime' );
has_field 'start_date.month' => ( type => 'Integer', range_start => 1,
range_end => 12 );
has_field 'start_date.day' => ( type => 'Integer', range_start => 1,
range_end => 31 );
has_field 'start_date.year' => ( type => 'Integer', range_start => 2000,
range_end => 2020 );
has '+dependency' => ( default => sub { [ ['start_date.month',
'start_date.day', 'start_date.year'] ] } );
sub options_fruit {
return (
1 => 'apples',
2 => 'oranges',
3 => 'kiwi',
);
}
sub options_vegetables {
return (
1 => 'lettuce',
2 => 'broccoli',
3 => 'carrots',
4 => 'peas',
);
}
}
my $form = Test::Form->new;
ok( $form, 'create form');
my $params = {
test_field => 'something',
fruit => 2,
vegetables => [2,4],
active => 'now',
comments => 'Four score and seven years ago...',
hidden => '1234',
selected => '1',
'start_date.month' => '7',
'start_date.day' => '14',
'start_date.year' => '2006',
};
$form->validate( $params );
my $output1 = $form->render_field( $form->field('test_field') );
is( $output1,
'
<label class="label" for="test_field">TEST:</label><input type="text" name="test_field" id="f99" value="something">',
'output from text field');
my $output2 = $form->render_field( $form->field('fruit') );
is( $output2,
'<label class="label" for="fruit">Fruit</label><select name="fruit""><option value="1" >apples</option><option value="2" selected="selected">oranges</option><option value="3" >kiwi</option></select>',
'output from select field');
my $output3 = $form->render_field( $form->field('vegetables') );
is( $output3,
'<label class="label" for="vegetables">Vegetables</label><select name="vegetables" multiple="multiple" size="5""><option value="2" selected="selected">broccoli</option><option value="4" selected="selected">peas</option><option value="1" >lettuce</option><option value="3" >carrots</option></select>',
'output from select multiple field');
my $output4 = $form->render_field( $form->field('active') );
is( $output4,
'<label class="label" for="active">Active</label><input type="checkbox" name="active" value="1"/>',
'output from checkbox field');
my $output5 = $form->render_field( $form->field('comments') );
is( $output5,
'
<label class="label" for="comments">Comments: </label><textarea name="comments" id="renderformcomments" rows="5" cols="10">Four score and seven years ago...</textarea>',
'output from textarea' );
my $output6 = $form->render_field( $form->field('hidden') );
is( $output6,
'
<label class="label" for="hidden">Hidden:</label><input type="hidden" name="hidden" id="renderformhidden" value="1234">',
'output from hidden field' );
my $output7 = $form->render_field( $form->field('selected') );
is( $output7,
'<label class="label" for="selected">Selected</label><input type="checkbox" name="selected" value="1" checked="checked"/>',
'output from boolean' );
my $output8 = $form->render_field( $form->field('start_date') );
is( $output8,
'<fieldset class="start_date">
<label class="label" for="month">Month:</label><input type="text" name="month" id="renderformmonth" value="7">
<label class="label" for="day">Day:</label><input type="text" name="day" id="renderformday" value="14">
<label class="label" for="year">Year:</label><input type="text" name="year" id="renderformyear" value="2006"></fieldset>',
'output from DateTime' );
my $output = $form->render;
ok( $output, 'get rendered output from form');