The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 18;

use_ok('HTML::Widget');

my $w = HTML::Widget->new;

$w->element( 'Textfield', 'foo' );
$w->element( 'Textfield', 'bar' );
$w->element( 'Textarea', 'baz' );
$w->element( 'Password', 'baz' );

{
    my @elements = $w->get_elements;
    
    is( scalar(@elements), 4, 'correct number of elements' );
    
    is( $elements[0]->name, 'foo', 'correct element name' );
    is( $elements[1]->name, 'bar', 'correct element name' );
    is( $elements[2]->name, 'baz', 'correct element name' );
    is( $elements[3]->name, 'baz', 'correct element name' );
}

{
    my @elements = $w->get_elements( type => 'Textfield' );
    
    is( scalar(@elements), 2, 'correct number of elements' );
    
    is( $elements[0]->name, 'foo', 'correct element name' );
    is( $elements[1]->name, 'bar', 'correct element name' );
}

{
    my @elements = $w->get_elements( type => 'Textarea' );
    
    is( scalar(@elements), 1, 'correct number of elements' );
    
    is( $elements[0]->name, 'baz', 'correct element name' );
}

{
    my @elements = $w->get_elements( name => 'bar' );
    
    is( scalar(@elements), 1, 'correct number of elements' );
    
    is( $elements[0]->name, 'bar', 'correct element name' );
}

{
    my @elements = $w->get_elements( name => 'baz' );
    
    is( scalar(@elements), 2, 'correct number of elements' );
    
    is( $elements[0]->name, 'baz', 'correct element name' );
    is( $elements[1]->name, 'baz', 'correct element name' );
    
    isa_ok( $elements[0], 'HTML::Widget::Element::Textarea', 'correct element type' );
    isa_ok( $elements[1], 'HTML::Widget::Element::Password', 'correct element type' );
}