use strict; use warnings FATAL => 'all'; use Test::More tests => 32; use DateTime; use DateTime::Duration; use HTML::Tested::Test::Request; use Data::Dumper; use Carp; BEGIN { use_ok('HTML::Tested', 'HTV'); use_ok('HTML::Tested::Value'); use_ok('HTML::Tested::Test::Value'); use_ok('HTML::Tested::Value::DropDown'); use_ok('HTML::Tested::Test::DateTime'); use_ok('HTML::Tested::Value::Marked'); use_ok('HTML::Tested::Test'); } HTML::Tested::Seal->instance('boo boo boo'); package T; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV, d => is_datetime => '%x'); package main; my $dt = DateTime->new(year => 1964, month => 10, day => 16); my $obj = T->new({ d => $dt }); my $stash = {}; $obj->ht_render($stash); is_deeply($stash, { d => 'Oct 16, 1964' }); $obj->d(undef); $obj->ht_render($stash); is_deeply($stash, { d => '' }); $obj = T->ht_load_from_params(d => 'Oct 27, 1976'); $obj->ht_render($stash); is_deeply($stash, { d => 'Oct 27, 1976' }); package T2; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV, e => is_datetime => { pattern => '%x', locale => 'ru' }); package main; $obj = T2->ht_load_from_params(e => '27.10.1976'); $stash = {}; $obj->ht_render($stash); is_deeply($stash, { e => '27.10.1976' }); T2->ht_add_widget(::HTV, id => is_sealed => 1); $obj->id(555555); my $qs = $obj->ht_make_query_string("hello", "id", "e"); like($qs, qr/^hello\?id/); unlike($qs, qr/555555/); like($qs, qr/&e=27\.10\.1976/); my $r = HTML::Tested::Test::Request->new; $r->parse_url($qs); isnt($r->param('id'), undef); $obj = T2->ht_load_from_params(map { $_, $r->param($_) } $r->param); is($obj->id, 555555); is($obj->e->year, '1976'); is($r->dir_config("Moo"), undef); $r->dir_config("Moo", "boo"); is($r->dir_config("Moo"), "boo"); $r->dir_config("Moo", undef); is($r->dir_config("Moo"), undef); T2->ht_add_widget(::HTV, 'd'); T2->ht_find_widget('d')->setup_datetime_option('%x'); is(T2->ht_find_widget('d')->options->{is_datetime}->pattern, '%x'); my $opts = {}; T2->ht_find_widget('d')->setup_datetime_option('%c', $opts); is(T2->ht_find_widget('d')->options->{is_datetime}->pattern, '%x'); is($opts->{is_datetime}->pattern, '%c'); package T3; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV . "::DropDown", dd => 0 => { is_sealed => 1 } , 1 => { is_datetime => '%x' }); package main; my $dt1 = DateTime->new(year => 1980, month => 2, day => 14); my $dt2 = DateTime->new(year => 1985, month => 7, day => 18); $obj = T3->new({ dd => [ [ 1, $dt1 ] , [ 2, $dt2, 1 ] ] }); $stash = {}; $obj->ht_render($stash); like($stash->{dd}, qr/Feb 14/); unlike($stash->{dd}, qr/"2"/); is_deeply([ HTML::Tested::Test->check_stash(ref($obj), $stash, { HT_SEALED_dd => [ [ 1, $dt1 ], [ 2, $dt2, 1 ] ] }) ], []) or diag(Dumper($stash)); my $now = DateTime->now(time_zone => POSIX::strftime('%z', localtime)); package T4; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV, d => 'is_datetime' => '%c'); package main; $obj = T4->new({ d => $now }); $stash = {}; $obj->ht_render($stash); # check range comparison is_deeply([ HTML::Tested::Test->check_stash(ref($obj), $stash , { d => $now }) ], []); my $dur = DateTime::Duration->new(seconds => 5); $obj->d($obj->d - $dur); $obj->ht_render($stash); $SIG{__WARN__} = sub { diag(Carp::longmess(@_)); }; is_deeply([ HTML::Tested::Test->check_stash(ref($obj), $stash , { d => HTML::Tested::Test::DateTime->now(10) }) ], []); package T5; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV . "::Marked", d => 'is_datetime' => '%c'); package main; $obj = T5->new({ d => ($now - $dur) }); $stash = {}; $obj->ht_render($stash); is_deeply([ HTML::Tested::Test->check_stash(ref($obj), $stash , { d => HTML::Tested::Test::DateTime->now(10) }) ], []); my @res = HTML::Tested::Test->check_stash(ref($obj), $stash , { d => HTML::Tested::Test::DateTime->now(3) }); is(@res, 1); my $str = "$stash->{d}"; is_deeply([ HTML::Tested::Test->check_text(ref($obj), $str , { d => HTML::Tested::Test::DateTime->now(10) }) ], []); my (undef, undef, $h) = localtime(time); like(HTML::Tested::Test::DateTime->now->strftime('%H'), qr/$h/);