use strict; use warnings FATAL => 'all'; use Test::More tests => 14; use Data::Dumper; BEGIN { use_ok('HTML::Tested', "HTV"); use_ok('HTML::Tested::Test'); use_ok('HTML::Tested::Value::PasswordBox'); } package T; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV."::PasswordBox", 'v'); package main; my $object = T->new({ v => 'b' }); is($object->v, 'b'); my $stash = {}; $object->ht_render($stash); is_deeply($stash, { v => < ENDS package T2; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV."::PasswordBox", 'p1'); __PACKAGE__->ht_add_widget(::HTV."::PasswordBox", p2 => check_mismatch => 'p1'); package main; $object = T2->new; is_deeply([ $object->ht_validate ], []); $object->p1('a'); $object->p2('b'); my @res = $object->ht_validate; is_deeply([ $res[0]->[0], $res[0]->[1] ], [ p2 => 'mismatch' ]); $object->p1('b'); is_deeply([ $object->ht_validate ], []); $object->p1(undef); @res = $object->ht_validate; is_deeply([ $res[0]->[0], $res[0]->[1] ], [ p2 => 'mismatch' ]); package T3; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV."::PasswordBox", 'p1' => constraints => [ [ foo => sub { return $_[1]->p2 eq 'bar' } ] ]); __PACKAGE__->ht_add_widget(::HTV."::PasswordBox", 'p2'); package main; $object = T3->new({ p2 => 'bar' }); is_deeply([ $object->ht_validate ], []); $object->p2('hi'); @res = $object->ht_validate; is(@res, 1); is($res[0]->[0], 'p1'); is($res[0]->[1], 'foo'); isa_ok($res[0]->[2], 'CODE');