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 ] ]);