use strict;
use warnings;
use lib 'lib';
use HTML::FormFu;
use HTML::Widget;
use CGI::FormBuilder;
use HTML::FormFu::FakeQuery;
use YAML::Syck qw( LoadFile );
use Benchmark qw( cmpthese );
my $formfu_file = 'benchmarks/login-formfu.yml';
my $builder_file = 'benchmarks/login-formbuilder.conf';
my $formfu = formfu();
my $widget = widget();
my $builder = builder();
#print $formfu;
#print "\n\n**********\n\n";
#print $widget->process;
#print "\n\n**********\n\n";
#print $builder->render;
#exit;
# make sure TT has loaded/cached everything
my $output = "$formfu";
#eval "use Devel::Profiler";
#Devel::Profiler::init();
#$output = "$formfu";
print "No submit\n";
cmpthese(
500,
{
'HTML::FormFu' => sub {
$output = "$formfu";
},
'HTML::Widget' => sub {
$output = $widget->process->as_xml;
},
'CGI::FormBuilder' => sub {
$output = $builder->render;
},
}
);
my $query = HTML::FormFu::FakeQuery->new(
$formfu,
{
_submitted => 1,
username => 'only me',
password => 'secret',
_submit => 'Submit',
});
print "\nConstruction + submission\n";
cmpthese(
500,
{
'HTML::FormFu' => sub {
my $formfu = formfu();
$formfu->process($query);
die 'formfu not submitted'
if ! $formfu->submitted_and_valid;
$output = "$formfu";
},
'HTML::Widget' => sub {
my $widget = widget();
my $result = $widget->process($query);
die "widget not submitted"
if !$result->submitted || $result->has_errors;
$output = $result->as_xml;
},
'CGI::FormBuilder' => sub {
my $builder = builder( params => $query );
die 'builder not submitted'
if ! $builder->submitted || ! $builder->validate;
$output = $builder->confirm;
},
}
);
sub formfu {
my $form = HTML::FormFu->new;
$form->load_config_file( $formfu_file );
return $form;
}
sub widget {
my $form = HTML::Widget->new;
$form->element( "Textfield", "username" )
->label("Username")
->size(10);
$form->element( "Password", "password" )
->label("Password")
->size(10);
$form->element( "Submit", "_submit" );
$form->constraint( "All", "username", "password" );
return $form;
}
sub builder {
my $form = CGI::FormBuilder->new(
source => $builder_file,
@_,
);
return $form;
}