more tests and moosification

This commit is contained in:
Doug Bell 2009-11-16 18:26:46 -06:00
parent 7ee8fec611
commit 631f6ad267
7 changed files with 109 additions and 72 deletions

View file

@ -119,18 +119,18 @@ Return the HTML for the form
=cut
sub toHtml {
override 'toHtml' => sub {
my ( $self ) = @_;
my @attrs = qw{ action method name enctype };
my $attrs = join " ", map { qq{$_="} . $self->get($_) . qq{"} } @attrs;
my $attrs = join " ", map { qq{$_="} . $self->$_ . qq{"} } grep { $self->$_ } @attrs;
my $html = sprintf '<form %s>', $attrs;
$html .= $self->maybe::next::method;
$html .= super();
$html .= '</form>';
return $html;
}
};
#----------------------------------------------------------------------------

View file

@ -114,8 +114,8 @@ Returns the HTML to render the fieldset.
sub toHtml {
my ( $self ) = @_;
my $html = '<fieldset><legend>' . $self->legend . '</legend>';
$html .= $self->maybe::next::method;
my $html = '<fieldset><legend>' . $self->label . '</legend>';
$html .= inner();
$html .= '</fieldset>';
return $html;

View file

@ -48,12 +48,12 @@ sub addField {
# Is $type a class name?
eval { WebGUI::Pluggable::load( $type ) };
if ( $@ ) {
eval { WebGUI::Pluggable::load( "WebGUI::Form::$type" ) };
eval { WebGUI::Pluggable::load( "WebGUI::Form::" . ucfirst( $type ) ) };
if ( $@ ) {
$self->session->error("Could not load field type '$type'. Try loading it manually." );
confess "Could not load field type '$type'. Try loading it manually.";
}
$type = "WebGUI::Form::$type";
$type = "WebGUI::Form::" . ucfirst( $type );
}
$field = $type->new( $self->session, { @properties } );
}
@ -65,6 +65,26 @@ sub addField {
#----------------------------------------------------------------------------
=head2 deleteField ( name )
Delete a field by name. Returns the field deleted.
=cut
sub deleteField {
my ( $self, $name ) = @_;
my $field = delete $self->{_fieldsByName}{$name};
for ( my $i = 0; $i < scalar @{$self->fields}; $i++ ) {
my $testField = $self->fields->[$i];
if ( $testField->get('name') eq $name ) {
splice @{$self->fields}, $i, 1;
}
}
return $field;
}
#----------------------------------------------------------------------------
=head2 getField ( name )
Get a field by name. Returns the field object.
@ -107,16 +127,15 @@ Render the fields in this part of the form.
=cut
sub toHtml {
my ( $self ) = @_;
override 'toHtml' => sub {
my ( $orig, $self ) = @_;
# This will always be the first one called, so no maybe::next::method
my $html = '';
my $html = super();
for my $field ( @{$self->fields} ) {
$html .= $field->toHtmlWithWrapper;
}
return $html;
}
};
1;

View file

@ -41,12 +41,12 @@ of name => value pairs to override properties in the C<object> (such as name and
=cut
sub addFieldset {
my ( $fieldset, $self );
if ( blessed( $_[1] ) ) {
my ( $self, $object, %properties ) = @_;
( $self, my $object, my %properties ) = @_;
$properties{ name } ||= $object->can('name') ? $object->name : "";
$properties{ label } ||= $object->can('label') ? $object->label : "";
my $fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, %properties );
push @{$self->fieldsets}, $fieldset;
$fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, %properties );
if ( $object->DOES('WebGUI::FormBuilder::Role::HasTabs') ) {
for my $objectTab ( @{$object->tabs} ) {
$fieldset->addTab( $objectTab );
@ -62,35 +62,14 @@ sub addFieldset {
$fieldset->addField( $objectField );
}
}
return $fieldset;
}
else {
my ( $self, @properties ) = @_;
my $fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, @properties );
push @{$self->fieldsets}, $fieldset;
$self->{_fieldsetsByName}{ $fieldset->name } = $fieldset;
return $fieldset;
( $self, my @properties ) = @_;
$fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, @properties );
}
}
#----------------------------------------------------------------------------
=head2 addFromHashRef( hashRef )
Add the fieldsets from the given serialized hashRef. See C<toHashRef> for more
information.
=cut
sub addFromHashRef {
my ( $self, $hashref ) = @_;
for my $fieldset ( @{$hashref->{fieldsets}} ) {
my $fs = WebGUI::FormBuilder::Fieldset->newFromHashref( $self->session, $fieldset );
$self->addFieldset( $fs );
}
$self->maybe::next::method;
push @{$self->fieldsets}, $fieldset;
$self->{_fieldsetsByName}{ $fieldset->name } = $fieldset;
return $fieldset;
}
#----------------------------------------------------------------------------
@ -134,13 +113,13 @@ Render the fieldsets in this part of the form
=cut
sub toHtml {
override 'toHtml' => sub {
my ( $self ) = @_;
my $html = $self->maybe::next::method;
my $html = super();
for my $fieldset ( @{$self->fieldsets} ) {
$html .= $fieldset->toHtml;
}
return $html;
}
};
1;

View file

@ -30,12 +30,12 @@ Any sub-tabs or fieldsets will also be included.
=cut
sub addTab {
my ($tab, $self);
if ( blessed( $_[1] ) ) {
my ( $self, $object, %properties ) = @_;
( $self, my $object, my %properties ) = @_;
$properties{ name } ||= $object->can('name') ? $object->name : "";
$properties{ label } ||= $object->can('label') ? $object->label : "";
my $tab = WebGUI::FormBuilder::Tab->new( $self->session, %properties );
push @{ $self->tabs }, $tab;
$tab = WebGUI::FormBuilder::Tab->new( $self->session, %properties );
if ( $object->DOES('WebGUI::FormBuilder::Role::HasTabs') ) {
for my $objectTab ( @{$object->tabs} ) {
$tab->addTab( $objectTab );
@ -51,15 +51,14 @@ sub addTab {
$tab->addField( $objectField );
}
}
return $tab;
}
else {
my ( $self, @properties ) = @_;
my $tab = WebGUI::FormBuilder::Tab->new( $self->session, @properties );
push @{$self->tabs}, $tab;
$self->{_tabsByName}{$tab->name} = $tab;
return $tab;
( $self, my @properties ) = @_;
$tab = WebGUI::FormBuilder::Tab->new( $self->session, @properties );
}
push @{$self->tabs}, $tab;
$self->{_tabsByName}{$tab->name} = $tab;
return $tab;
}
#----------------------------------------------------------------------------
@ -97,32 +96,19 @@ sub getTab {
#----------------------------------------------------------------------------
=head2 getTabs ( )
Get all tab objects. Returns the arrayref of tabs.
=cut
sub getTabs {
my ( $self ) = @_;
return $self->tabs;
}
#----------------------------------------------------------------------------
=head2 toHtml ( )
Render the tabs in this part of the form
=cut
sub toHtml {
override 'toHtml' => sub {
my ( $self ) = @_;
my $html = $self->maybe::next::method;
my $html = super();
for my $tab ( @{$self->tabs} ) {
$html .= $tab->toHtml;
}
return $html;
}
};
1;

View file

@ -98,7 +98,7 @@ sub toHtml {
my $html = '<div class="yui-tab">'
. '<div class="yui-tab-label">' . $self->label . '</div>'
;
$html .= $self->maybe::next::method;
$html .= inner();
$html .= '</div>';
return $html;

View file

@ -29,7 +29,7 @@ my $session = WebGUI::Test->session;
#----------------------------------------------------------------------------
# Tests
plan tests => 53; # Increment this number for each test you create
plan tests => 66; # Increment this number for each test you create
#----------------------------------------------------------------------------
# Constructor and properties
@ -108,7 +108,22 @@ ok( $newTab->fieldsets->[0], 'fieldset exists' );
is( $newTab->fieldsets->[0]->name, 'advanced', 'fieldset has same name' );
ok( $newTab->tabs->[0], 'subtab exists' );
is( $newTab->tabs->[0]->name, 'more', 'subtab has same name' );
cmp_deeply(
$fb->tabs,
[ $tab, $newTab ],
'added tab',
);
is( $fb->getTab('newname'), $newTab, 'new tab can be gotten' );
# deleteTab
my $deletedTab = $fb->deleteTab( 'newname' );
is( $deletedTab, $newTab, 'deleteTab returns object' );
cmp_deeply(
$fb->tabs,
[ $tab ],
'deleted tab',
);
ok( !$fb->getTab('newname'), 'deleted tab cannot be gotten' );
# addFieldset with properties
$fb = WebGUI::FormBuilder->new( $session );
@ -151,6 +166,22 @@ ok( $newFset->fieldsets->[0], 'subfieldset exists' );
is( $newFset->fieldsets->[0]->name, 'advanced', 'subfieldset has same name' );
ok( $newFset->tabs->[0], 'tab exists' );
is( $newFset->tabs->[0]->name, 'more', 'tab has same name' );
cmp_deeply(
$fb->fieldsets,
[ $fset, $newFset],
'added fieldset',
);
is( $fb->getFieldset('newname'), $newFset, 'new fieldset can be gotten' );
# deletefieldset
my $deletedFieldset = $fb->deleteFieldset( 'newname' );
is( $deletedFieldset, $newFset, 'deletefieldset returns object' );
cmp_deeply(
$fb->fieldsets,
[ $fset ],
'deleted fieldset',
);
ok( !$fb->getFieldset('newname'), 'deleted fieldset cannot be gotten' );
# addField with properties
$fb = WebGUI::FormBuilder->new( $session );
@ -185,8 +216,30 @@ cmp_deeply(
'fields 2',
);
# deleteField
my $field3 = $fb->deleteField( 'type' );
is( $field3, $field2, 'deleteField returns same field' );
ok( !$fb->getField('type'), 'field is deleted' );
cmp_deeply(
$fb->fields,
[ $field ],
'field is deleted from fields',
);
#----------------------------------------------------------------------------
# Serialize and deserialize
my $fb = WebGUI::FormBuilder->new( $session );
my $fset = $fb->addFieldset( name => 'search', label => 'Search' );
$fset->addField( 'text', name => 'keywords', label => 'Keywords' );
my $tab = $fb->addTab( name => 'advanced', label => 'Advanced Search' );
$tab->addField( 'text', name => 'type', label => 'Type' );
$fb->addField( 'submit', name => 'submit', label => 'Submit' );
#----------------------------------------------------------------------------
# toHtml
print $fb->toHtml;
#vim:ft=perl