The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 13;

use HTML::Widget;

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

$w->constraint( 'Integer',   'foo' );
$w->constraint( 'Printable', 'bar' );
$w->constraint( 'All',       'baz', 'one' );
$w->constraint( 'All',       'baz', 'two' );

{
    my @constraints = $w->get_constraints;

    is( scalar(@constraints), 4, 'correct number of constraints' );

    is_deeply( $constraints[0]->names, ['foo'], 'correct constraint names' );
    is_deeply( $constraints[1]->names, ['bar'], 'correct constraint names' );
    is_deeply( $constraints[2]->names,
        [qw/ baz one /], 'correct constraint names' );
    is_deeply( $constraints[3]->names,
        [qw/ baz two /], 'correct constraint names' );
}

{
    my @constraints = $w->get_constraints( type => 'Integer' );

    is( scalar(@constraints), 1, 'correct number of constraints' );

    is_deeply( $constraints[0]->names, ['foo'], 'correct constraint names' );

    isa_ok(
        $constraints[0],
        'HTML::Widget::Constraint::Integer',
        'correct constraint type'
    );
}

{
    my @constraints = $w->get_constraints( type => 'All' );

    is( scalar(@constraints), 2, 'correct number of constraints' );

    is_deeply( $constraints[0]->names,
        [qw/ baz one /], 'correct constraint names' );

    is_deeply( $constraints[1]->names,
        [qw/ baz two /], 'correct constraint names' );

    isa_ok(
        $constraints[0],
        'HTML::Widget::Constraint::All',
        'correct constraint type'
    );

    isa_ok(
        $constraints[1],
        'HTML::Widget::Constraint::All',
        'correct constraint type'
    );
}