use strict;
use warnings;
use Test::More;
use File::ShareDir;
BEGIN {
plan skip_all => 'Install Template Toolkit to test Render::WithTT'
unless eval { require Template };
}
use_ok('HTML::FormHandler::Render::WithTT');
use_ok('HTML::FormHandler::Render::Simple');
use_ok('HTML::FormHandler::Render::Table');
{
package Test::Form;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
has '+is_html5' => (default => 1);
has_field 'foo' => ( css_class => 'schoen', style => 'bunt', title => 'MyTitle', required => 1, maxlength=> 10 );
has_field 'bar' => ( element_attr => { arbitrary => 'something', title => 'AltTitle' } );
has_field 'range' => ( type => "Integer", range_start => 5, range_end => 10 );
has_field 'email' => ( type => "Email");
has_field 'date' => ( type => "Date");
has_field 'money' => ( type => "Money");
}
{
package Test::Form::WithTT::Role;
use Moose::Role;
with 'HTML::FormHandler::Render::WithTT' =>
{ -excludes => [ 'build_tt_template', 'build_tt_include_path' ] };
sub build_tt_template {'form/form.tt'}
sub build_tt_include_path { ['share/templates'] }
}
my %results;
{
my $form
= Test::Form->new( css_class => 'beautifully', style => 'colorful' );
$results{Widgets} = $form->render;
}
{
my $form
= Test::Form->new_with_traits( traits => ['Test::Form::WithTT::Role'],
css_class => 'beautifully', style => 'colorful' );
$results{TT} = $form->tt_render;
}
{
my $form
= Test::Form->new_with_traits( traits => ['HTML::FormHandler::Render::Simple'],
css_class => 'beautifully', style => 'colorful' );
$results{Simple} = $form->render;
}
{
my $form
= Test::Form->new_with_traits( traits => ['HTML::FormHandler::Render::Table'],
css_class => 'beautifully', style => 'colorful' );
$results{Table} = $form->render;
}
is( scalar( grep {$_} values %results ),
scalar keys %results,
'Both methods rendered'
);
while ( my ( $key, $res ) = each %results ) {
like( $res, qr/class="schoen"/, "$key Field got the class" );
like( $res, qr/style="bunt"/, "$key Field got the style" );
like( $res, qr/class="beautifully"/, "$key Form got the class" );
like( $res, qr/style="colorful"/, "$key Form got the style" );
like( $res, qr/arbitrary="something"/, "$key Field got the arbitrary attribute" );
like( $res, qr/title="MyTitle"/, "$key Field got the title" );
like( $res, qr/title="AltTitle"/, "$key Field got the title from element_attr" );
like( $res, qr/required="required"/, "$key Form got the html5 required" );
like( $res, qr/input type="number" name="money"/, "$key Form got the html5 type" );
like( $res, qr/input type="date" name="date"/, "$key Form got the html5 type" );
like( $res, qr/input type="email" name="email"/, "$key Form got the html5 type" );
like( $res, qr/input type="number" name="range"/, "$key Form got the html5 type" );
like( $res, qr/max="10"/, "$key Form got the html5 max attribute" );
like( $res, qr/min="5"/, "$key Form got the html5 min attribute" );
}
done_testing();