use strict;
use warnings FATAL => 'all';
use Test::More tests => 18;
use HTML::Tested::Test;
BEGIN { use_ok('HTML::Tested::Value::Snippet');
use_ok('HTML::Tested', 'HTV');
use_ok('HTML::Tested::Value::EditBox');
use_ok('HTML::Tested::Value::DropDown');
use_ok('HTML::Tested::Value::CheckBox');
use_ok('HTML::Tested::List');
use_ok('HTML::Tested::Test::Request');
}
package T;
use base 'HTML::Tested';
__PACKAGE__->ht_add_widget(::HTV, "v");
__PACKAGE__->ht_add_widget(::HTV . "::Snippet", sni => is_trusted => 1);
package main;
my $obj = T->new({ v => "&hi", sni => "[% v %]" });
my $stash = {};
$obj->ht_render($stash);
is_deeply($stash, { v => '&hi', sni => "&hi" });
# two styles of tests are possible: direct comparison and through render
is_deeply([ HTML::Tested::Test->check_stash(ref($obj), $stash, {
sni => "&hi" }) ], []);
is_deeply([ HTML::Tested::Test->check_stash(ref($obj), $stash, {
v => "&hi", sni => "[% v %]" }) ], []);
# check that trusted doesn't load from param
T->ht_set_widget_option(sni => default_value => '[% foo');
$obj = T->ht_load_from_params(v => 'f', sni => 'k');
is($obj->v, 'f');
is($obj->sni, undef);
$obj->ht_render($stash);
is_deeply($stash, { v => 'f', sni => "[% foo" });
my $req = HTML::Tested::Test::Request->new({ uri => 'g' });
is($req->uri, 'g');
# check that set_params clears old ones
$req->set_params({ foo => 'boo' });
$req->set_params({ goo => 'woo' });
is($req->param('foo'), undef);
# todo: default_value, check, uncheck
package T1;
use base 'HTML::Tested';
__PACKAGE__->ht_add_widget(::HTV . "::EditBox", "eb");
__PACKAGE__->ht_add_widget(::HTV . "::DropDown", "dd");
package main;
my $c = T1->ht_add_widget("HTML::Tested::List", "l")->containee;
$c->ht_add_widget(::HTV . "::CheckBox", "ch1");
$obj = T1->new({ eb => 'foo', l => [ $c->new({ ch1 => [ 284 ] }) ] });
$obj->ht_merge_params(eb => 'goo', l__1__ch1 => 1);
is($obj->eb, 'goo');
is_deeply($obj->l->[0]->ch1, [ 284, 1 ]);
$obj = T1->new({ dd => [ [ 1, 'A', 1 ], [ 2, 'B' ] ] });
$obj->ht_merge_params(dd => 2);
is_deeply($obj->dd, [ [ 1, 'A', "" ], [ 2, 'B', 1 ] ]);