use strict;
use warnings FATAL => 'all';
use Test::More tests => 21;
use Data::Dumper;
use Carp;
BEGIN { use_ok('HTML::Tested', qw(HTV));
use_ok('HTML::Tested::Test');
use_ok('HTML::Tested::Value::Radio');
use_ok('HTML::Tested::List');
}
my $_id = 1;
package T;
use base 'HTML::Tested';
__PACKAGE__->ht_add_widget(::HTV.'::Radio', 'v', default_value => [ 'a', 'b', 'c' ]);
package main;
my $object = T->new;
is($object->v, undef);
my $stash = {};
$object->ht_render($stash);
is_deeply($stash, { v_a => <
ENDS
, v_b => <
ENDS
, v_c => <
ENDS
, }) or diag(Dumper($stash));
is_deeply([ HTML::Tested::Test->check_stash(ref($object),
$stash, {}) ], []);
is_deeply([ HTML::Tested::Test->check_stash(ref($object),
$stash, { v => [ 'a', 'b', 'c' ] }) ], []);
is_deeply([ HTML::Tested::Test->check_stash(ref($object),
$stash, { v => [ 'a', [ 'b', 1 ], 'c' ] }) ], [
'Mismatch at v_b: got "
", expected "
"'
]);
is_deeply([ HTML::Tested::Test->check_stash(ref($object),
$stash, { v => [ 'a', 'b' ] }) ], [
'Mismatch at v_c: got "
", expected undef'
]);
delete $stash->{v_c};
is_deeply([ HTML::Tested::Test->check_stash(ref($object),
$stash, { v => [ 'a', 'b', 'c' ] }) ], [
'Mismatch at v_c: got undef, expected "
"'
]);
$object->v([ 'a', [ 'b', 1 ], 'c' ]);
$stash = {};
$object->ht_render($stash);
is_deeply($stash, { v_a => <
ENDS
, v_b => <
ENDS
, v_c => <
ENDS
, }) or diag(Dumper($stash));
is_deeply([ HTML::Tested::Test->check_text(ref($object), <
ENDS
, { v => [ 'a', [ 'b', 1 ], 'c' ] }) ], []);
is_deeply([ HTML::Tested::Test->check_text(ref($object), <
ENDS
, { v => [ 'a', [ 'b', 1 ], [ 'c', 1 ] ] }) ], [
'Unable to find "
" in "
"'
]);
package L;
use base 'HTML::Tested';
__PACKAGE__->ht_add_widget('HTML::Tested::List', 'l1', 'T');
package main;
$object = L->new({ l1 => [ map { T->new({ v => $_ }) }
[ [ 'a', 1 ], 'b', 'c' ]
, [ 'a', 'b', [ 'c', 1 ] ] ] });
$stash = {};
$object->ht_render($stash);
is_deeply($stash, { l1 => [ { v_a => <
ENDS
, v_b => <
ENDS
, v_c => <
ENDS
}, { v_a => <
ENDS
, v_b => <
ENDS
, v_c => <
ENDS
} ], }) or diag(Dumper($stash));
is_deeply([ HTML::Tested::Test->check_stash(ref($object), $stash,
{ l1 => [ { v => [ [ 'a', 1 ], 'b', 'c' ] },
{ v => [ 'a', 'b', [ 'c', 1 ] ] } ] }) ], []);
is_deeply([ HTML::Tested::Test->check_stash(ref($object), $stash,
{ l1 => [ { },
{ v => [ 'a', 'b', [ 'c', 1 ] ] } ] }) ], []);
is_deeply([ HTML::Tested::Test->check_text(ref($object), <
ENDS
, { l1 => [ { v => [ [ 'a', 1 ], 'b', 'c' ] },
{ v => [ 'a', 'b', [ 'c', 1 ] ] } ] }) ], []);
is_deeply([ HTML::Tested::Test->check_text(ref($object), <
ENDS
, { l1 => [ { v => [ [ 'a', 1 ], 'b', 'c' ] },
{ } ] }) ], []);
my $_def_val = [ 'a', [ 'b', 1 ] ];
package T2;
use base 'HTML::Tested';
__PACKAGE__->ht_add_widget(::HTV.'::Radio', 'v', default_value => $_def_val);
package main;
$object = T2->new;
$stash = {};
$object->ht_render($stash);
is_deeply($stash, { v_a => <
ENDS
, v_b => <
ENDS
});
is_deeply($_def_val, [ 'a', [ 'b', 1 ] ]);