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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
#!/usr/bin/perl
use strict;
use vars qw($TESTING);
$TESTING = 1;
use Test;
# use a BEGIN block so we print our plan before CGI::FormBuilder is loaded
BEGIN {
# try to load template engine so absent template does
# not cause all tests to fail
eval "require HTML::Template";
if ($@) {
# eval failed, skip all tests
print "1..1\nok 1\n";
exit 0;
} else {
plan tests => 3;
}
}
# Need to fake a request or else we stall
$ENV{REQUEST_METHOD} = 'GET';
$ENV{QUERY_STRING} = 'ticket=111&user=pete&replacement=TRUE';
use CGI::FormBuilder;
# Create our template and store it in a scalarref
my $template = <<EOT;
<html>
<title>User Info</title>
Please update your info and hit "Submit".
<p>
<tmpl_var form-start>
Enter your name: <tmpl_var field-name>
<select name="color" multiple>
<tmpl_loop loop-color>
<option value="<tmpl_var value>" <tmpl_var selected>><tmpl_var label></option>
</tmpl_loop>
</select>
FYI, your dress size is <tmpl_var value-size><br>
<tmpl_var form-reset> <tmpl_var form-submit>
<tmpl_var form-end>
EOT
# What options we want to use, and what we expect to see
my @test = (
{
opt => { fields => [qw/name color/], submit => 0, reset => 'No esta una button del submito',
template => { scalarref => \$template, die_on_bad_params => 0 },
},
mod => { color => { options => [qw/red green blue/], nameopts => 1 },
size => { value => 42 } },
res => q(<html>
<title>User Info</title>
Please update your info and hit "Submit".
<p>
<form action="03template.t" method="GET"><input name="_submitted" type="hidden" value="1" /><input name="_sessionid" type="hidden" value="" />
Enter your name: <input name="name" type="text" />
<select name="color" multiple>
<option value="red" >Red</option>
<option value="green" >Green</option>
<option value="blue" >Blue</option>
</select>
FYI, your dress size is 42<br>
<input name="_reset" type="reset" value="No esta una button del submito" />
</form>
),
},
{
opt => { fields => [qw/name color size/],
template => { scalarref => \$template, die_on_bad_params => 0 },
values => {color => [qw/purple/], size => 8},
reset => 'Start over, boob!',
},
mod => { color => { options => [qw/white black other/] },
name => { size => 80 } },
res => q(<html>
<title>User Info</title>
Please update your info and hit "Submit".
<p>
<form action="03template.t" method="GET"><input name="_submitted" type="hidden" value="1" /><input name="_sessionid" type="hidden" value="" />
Enter your name: <input name="name" size="80" type="text" />
<select name="color" multiple>
<option value="white" >white</option>
<option value="black" >black</option>
<option value="other" >other</option>
</select>
FYI, your dress size is 8<br>
<input name="_reset" type="reset" value="Start over, boob!" /> <input name="_submit" type="submit" value="Submit" />
</form>
),
},
{
opt => { fields => [qw/name color email/], submit => [qw/Update Delete/], reset => 0,
template => { scalarref => \$template, die_on_bad_params => 0 },
values => {color => [qw/yellow green orange/]},
},
mod => { color => {options => [qw/red green blue yellow pink purple orange chartreuse/] },
size => {value => '(unknown)' }
},
res => q(<html>
<title>User Info</title>
Please update your info and hit "Submit".
<p>
<form action="03template.t" method="GET"><input name="_submitted" type="hidden" value="1" /><input name="_sessionid" type="hidden" value="" />
Enter your name: <input name="name" type="text" />
<select name="color" multiple>
<option value="red" >red</option>
<option value="green" selected>green</option>
<option value="blue" >blue</option>
<option value="yellow" selected>yellow</option>
<option value="pink" >pink</option>
<option value="purple" >purple</option>
<option value="orange" selected>orange</option>
<option value="chartreuse" >chartreuse</option>
</select>
FYI, your dress size is (unknown)<br>
<input name="_submit" onClick="this.form._submit.value = this.value;" type="submit" value="Update" /><input name="_submit" onClick="this.form._submit.value = this.value;" type="submit" value="Delete" />
</form>
),
},
);
# Cycle thru and try it out
for (@test) {
my $form = CGI::FormBuilder->new( %{ $_->{opt} } );
while(my($f,$o) = each %{$_->{mod} || {}}) {
$o->{name} = $f;
$form->field(%$o);
}
# just compare the output of render with what's expected
ok($form->render, $_->{res});
if ($ENV{LOGNAME} eq 'nwiger') {
open(O, ">/tmp/fb.1.out");
print O $form->render;
close O;
open(O, ">/tmp/fb.2.out");
print O $_->{res};
close O;
system "diff /tmp/fb.1.out /tmp/fb.2.out";
exit if $?;
}
}
|