use strict; use warnings; use Test::More tests => 46; use HTML::Widget; use lib qw(t/lib); use HTMLWidget::TestLib; my $w = HTML::Widget->new->method('post')->action('/foo/bar'); $w->element( 'Textfield', 'age' )->label('Age')->size(3); $w->element( 'Textfield', 'name' )->label('Name')->size(60); $w->element( 'Submit', 'ok' )->value('OK'); $w->constraint( 'Integer', 'age' )->message('No integer.'); $w->constraint( 'Length', 'age' )->min(1)->max(3)->message('Wrong length.'); $w->constraint( 'Range', 'age' )->min(22)->max(24)->message('Wrong range.'); $w->constraint( 'Regex', 'age' )->regex(qr/\D+/) ->message('Contains digit characters.'); $w->constraint( 'Not_Integer', 'name' ); $w->constraint( 'All', 'age', 'name' )->message('Missing value.'); { my ($e) = $w->get_elements( name => 'age' ); ok( $e, 'Found element with name of "age"' ); isa_ok( $e, 'HTML::Widget::Element' ); ok( $e->container_class, 'Can read container class for individual object' ); is( $e->container_class, 'HTML::Widget::Container', 'Default container class is right' ); HTML::Widget::Element->container_class('Class1'); is( $e->container_class, 'Class1', 'Object instance inherits super container class value' ); HTML::Widget::Element::Textfield->container_class('Class2'); is( $e->container_class, 'Class2', 'Object instance inherits container class value' ); $e->container_class('Class3'); is( $e->container_class, 'Class3', 'Object instance container class value' ); $e->container_class(undef); HTML::Widget::Element::Textfield->container_class(''); isa_ok( $e->containerize($w), 'HTML::Widget::Container', 'Container isa Container when class set to empty string' ); # Reset test classes back, and use TestContainer for all elements delete $e->{container_class}; HTML::Widget::Element->container_class('TestContainer'); HTML::Widget::Element::Textfield->container_class('TestContainer'); } # Without query { my $f = $w->result; is( $f->as_xml, <


EOF } # With mocked basic query { my $query = HTMLWidget::TestLib->mock_query( { age => 23, name => 'sri', ok => 'OK', } ); my $f = $w->process($query); isa_ok( $f, 'HTML::Widget::Result', 'Result is HTML::Widget::Result object' ); my @e = $f->has_errors; ok( $f->valid('name'), 'Field name is valid' ); is( $e[0], 'age', 'Field age has errors' ); is( $f->valid('name'), 1, 'Field name is valid' ); is( !$f->valid('age'), 1, 'Field age is not valid' ); is( !$f->valid('foo'), 1, 'Field foo is not valid' ); is( !$f->has_errors('name'), 1, 'Field name has no errors' ); is( $f->has_errors('age'), 1, 'Field foo has errors' ); is( $f->has_error('foo'), 0, 'Field foo has no errors' ); is( $f->param('name'), 'sri', 'Param name is accessible' ); is( $f->param('age'), undef, 'Param age is not accessible' ); is( $f->param('foo'), undef, 'Param foo is not defined' ); is( $f->params->{name}, 'sri', 'Param name is defined' ); is( $f->params->{age}, undef, 'Param age is not defined' ); is( $f->parameters->{foo}, undef, 'Param foo is not defined' ); $f->add_valid( 'bar', 'dude' ); is( $f->params->{bar}, 'dude', 'Bar is dude' ); is( $f->param('bar'), 'dude', 'Bar is dude' ); is( $f->valid('bar'), 1, 'Bar is valid' ); my $c = $f->element('ok'); is( $c->label, undef, 'Label is empty' ); $c = $f->element('age'); isa_ok( $c, 'HTML::Widget::Container', 'Element is a (base) container object' ); isa_ok( $c, 'TestContainer', 'Element is also an overridden container object' ); isa_ok( $c->element, 'HTML::Element', 'Element is a HTML::Element object' ); isa_ok( $c->error, 'HTML::Element', 'Error is a HTML::Element object' ); isa_ok( $c->label, 'HTML::Element', 'Label is a HTML::Element object' ); is( $c->javascript, '', 'JavaScript is empty' ); is( $c->element_xml, <Age
EOF is( $c->error_xml, <Contains digit characters. EOF is( $c->javascript_xml, < EOF is( $c->as_xml, <Age
Contains digit characters. EOF my @errors = $f->errors; is( $errors[0]->name, 'age', 'Expected error' ); is( $errors[0], 'Contains digit characters.', 'Field contains digit characters' ); is( "$f", <

Contains digit characters.
EOF } # Embed { my $w2 = HTML::Widget->new('foo')->action('/foo'); my $w3 = HTML::Widget->new('bar'); $w3->element( 'Textfield', 'baz' ); $w2->embed($w); $w2->embed($w3); my $f = $w2->process; is( $f->as_xml, <


EOF } # Merge { my $w2 = HTML::Widget->new('foo')->action('/foo'); my $w3 = HTML::Widget->new('bar'); $w3->element( 'Textfield', 'baz' ); $w2->merge($w); $w2->merge($w3); my $f = $w2->process; is( $f->as_xml, <


EOF } # Test $w->element_container_class { my $w2 = HTML::Widget->new('foo')->action('/foo'); $w2->merge($w); HTML::Widget::Element->container_class(undef); HTML::Widget::Element::Textfield->container_class(undef); my $f = $w2->process; is( $f->as_xml, <element_container_class' );
EOF $w2->element_container_class('TestContainer'); $f = $w2->process; is( $f->as_xml, <element_container_class changes output for that widget' );


EOF $f = $w->name('foo')->action('/foo')->process; is( $f->as_xml, <element_container_class doesnt change output for $w->process' );
EOF }