The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 13;

use HTML::Widget;
use lib 't/lib';
use HTMLWidget::TestLib;

my $w = HTML::Widget->new;

$w->element( 'Button',     'my_button', )->value(1);
$w->element( 'Checkbox',   'my_checkbox' )->value(1)->checked('checked');
$w->element( 'Checkbox',   'my_checkbox' )->value(0);
$w->element( 'Hidden',     'my_hidden' )->value(1);
$w->element( 'Password',   'my_password' )->value(1)->fill(1);
$w->element( 'Radio',      'my_radio' )->value(1)->checked('checked');
$w->element( 'Radio',      'my_radio' )->value(0);
$w->element( 'RadioGroup', 'my_radiogroup' )->values( 1, 0 )->checked(1);
$w->element( 'Reset',      'my_reset' )->value(1);
$w->element( 'Select',     'my_select' )
    ->options( 0 => 'unsubscribed', 1 => 'subscribed' )->selected(1);
$w->element( 'Submit',    'my_submit' )->value(1);
$w->element( 'Textarea',  'my_textarea' )->value(1);
$w->element( 'Textfield', 'my_textfield' )->value(1);

{
    my $f = $w->process();
    is( "$f", <<EOF, 'XML output is filled out form' );
<form id="widget" method="post"><fieldset class="widget_fieldset"><input class="button" id="widget_my_button" name="my_button" type="button" value="1" /><input checked="checked" class="checkbox" id="widget_my_checkbox_1" name="my_checkbox" type="checkbox" value="1" /><input class="checkbox" id="widget_my_checkbox_2" name="my_checkbox" type="checkbox" value="0" /><input class="hidden" id="widget_my_hidden" name="my_hidden" type="hidden" value="1" /><input class="password" id="widget_my_password" name="my_password" type="password" value="1" /><input checked="checked" class="radio" id="widget_my_radio_1" name="my_radio" type="radio" value="1" /><input class="radio" id="widget_my_radio_2" name="my_radio" type="radio" value="0" /><fieldset class="radiogroup_fieldset" id="widget_my_radiogroup"><span class="radiogroup"><label for="widget_my_radiogroup_1" id="widget_my_radiogroup_1_label"><input checked="checked" class="radio" id="widget_my_radiogroup_1" name="my_radiogroup" type="radio" value="1" />1</label><label for="widget_my_radiogroup_2" id="widget_my_radiogroup_2_label"><input class="radio" id="widget_my_radiogroup_2" name="my_radiogroup" type="radio" value="0" />0</label></span></fieldset><input class="reset" id="widget_my_reset" name="my_reset" type="reset" value="1" /><select class="select" id="widget_my_select" name="my_select"><option value="0">unsubscribed</option><option selected="selected" value="1">subscribed</option></select><input class="submit" id="widget_my_submit" name="my_submit" type="submit" value="1" /><textarea class="textarea" cols="40" id="widget_my_textarea" name="my_textarea" rows="20">1</textarea><input class="textfield" id="widget_my_textfield" name="my_textfield" type="text" value="1" /></fieldset></form>
EOF
}

# make sure XML of the result object has submitted values, not defaults

{
    my $query = HTMLWidget::TestLib->mock_query( {
            my_button     => 0,
            my_checkbox   => 0,
            my_hidden     => 0,
            my_password   => 0,
            my_radio      => 0,
            my_radiogroup => 0,
            my_reset      => 0,
            my_select     => 0,
            my_submit     => 0,
            my_textarea   => 0,
            my_textfield  => 0,
        } );

    my $f = $w->process($query);

    is( $f->param('my_button'),     0 );
    is( $f->param('my_checkbox'),   0 );
    is( $f->param('my_hidden'),     0 );
    is( $f->param('my_password'),   0 );
    is( $f->param('my_radio'),      0 );
    is( $f->param('my_radiogroup'), 0 );
    is( $f->param('my_reset'),      0 );
    is( $f->param('my_select'),     0 );
    is( $f->param('my_submit'),     0 );
    is( $f->param('my_textarea'),   0 );
    is( $f->param('my_textfield'),  0 );

    is( "$f", <<EOF, 'XML output is filled out form' );
<form id="widget" method="post"><fieldset class="widget_fieldset"><input class="button" id="widget_my_button" name="my_button" type="button" value="0" /><input class="checkbox" id="widget_my_checkbox_1" name="my_checkbox" type="checkbox" value="1" /><input checked="checked" class="checkbox" id="widget_my_checkbox_2" name="my_checkbox" type="checkbox" value="0" /><input class="hidden" id="widget_my_hidden" name="my_hidden" type="hidden" value="0" /><input class="password" id="widget_my_password" name="my_password" type="password" value="0" /><input class="radio" id="widget_my_radio_1" name="my_radio" type="radio" value="1" /><input checked="checked" class="radio" id="widget_my_radio_2" name="my_radio" type="radio" value="0" /><fieldset class="radiogroup_fieldset" id="widget_my_radiogroup"><span class="radiogroup"><label for="widget_my_radiogroup_1" id="widget_my_radiogroup_1_label"><input class="radio" id="widget_my_radiogroup_1" name="my_radiogroup" type="radio" value="1" />1</label><label for="widget_my_radiogroup_2" id="widget_my_radiogroup_2_label"><input checked="checked" class="radio" id="widget_my_radiogroup_2" name="my_radiogroup" type="radio" value="0" />0</label></span></fieldset><input class="reset" id="widget_my_reset" name="my_reset" type="reset" value="0" /><select class="select" id="widget_my_select" name="my_select"><option selected="selected" value="0">unsubscribed</option><option value="1">subscribed</option></select><input class="submit" id="widget_my_submit" name="my_submit" type="submit" value="0" /><textarea class="textarea" cols="40" id="widget_my_textarea" name="my_textarea" rows="20">0</textarea><input class="textfield" id="widget_my_textfield" name="my_textfield" type="text" value="0" /></fieldset></form>
EOF
}