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

BEGIN{ use_ok("FormValidator::Simple::Profile") }

my $rec = FormValidator::Simple::Profile::Record->new;

$rec->set_keys( { id =>  ['key'] } );

is( $rec->name,      'id'  );
is( $rec->keys->[0], 'key' );

$rec->set_keys( { 'id2' => 'key2' } );

is( $rec->name,      'id2'  );
is( $rec->keys->[0], 'key2' );

$rec->set_keys( { 'id3' => [qw/key3 key4 key5/] } );

is( $rec->name,      'id3'  );
is( $rec->keys->[0], 'key3' );
is( $rec->keys->[1], 'key4' );
is( $rec->keys->[2], 'key5' );

$rec->set_keys( 'id4' );

is( $rec->name,      'id4' );
is( $rec->keys->[0], 'id4' );

isa_ok( $rec->constraints, "FormValidator::Simple::Constraints" );

$rec->set_constraints( ['INT'] );

my $c1 = $rec->constraints->get_record_at(0);

is( $c1->name, 'INT' );

$rec->set_constraints( [qw/ASCII INT/,[qw/LENGTH 4 10/]] );

my $c2 = $rec->constraints->get_record_at(0);
my $c3 = $rec->constraints->get_record_at(1);
my $c4 = $rec->constraints->get_record_at(2);

is( $rec->constraints->records_count, 3 );
ok( !$rec->constraints->needs_blank_check );
is( $c2->name, 'ASCII'  );
is( $c3->name, 'INT'    );
is( $c4->name, 'LENGTH' );
is( $c4->args->[0], 4   );
is( $c4->args->[1], 10  );

$rec->set_constraints( [qw/NOT_BLANK ASCII INT/] );

my $c5 = $rec->constraints->get_record_at(0);
my $c6 = $rec->constraints->get_record_at(1);

is( $rec->constraints->records_count, 2 );
ok( $rec->constraints->needs_blank_check );
is( $c5->name, 'ASCII' );
is( $c6->name, 'INT'   );

$rec->set_constraints('INT');

my $c7 = $rec->constraints->get_record_at(0);

is( $c7->name, 'INT' );

$rec->set_constraints( ['NOT_BLANK'] );

is( $rec->constraints->records_count, 0 );
ok( $rec->constraints->needs_blank_check );

my $prof = FormValidator::Simple::Profile->new( [
	id   => [qw/NOT_BLANK/],
	{ name => [qw/name1 name2/] } => [qw/ANY/],
	pass => [qw/NOT_BLANK ASCII/,['LENGTH', 4, 10]]
] );

my $prec1 = $prof->get_record_at(0);
my $prec2 = $prof->get_record_at(1);
my $prec3 = $prof->get_record_at(2);

is( $prof->records_count, 3 );

isa_ok( $prec1, "FormValidator::Simple::Profile::Record" );
isa_ok( $prec2, "FormValidator::Simple::Profile::Record" );
isa_ok( $prec3, "FormValidator::Simple::Profile::Record" );

ok( $prec1->constraints->needs_blank_check  );
is( $prec1->constraints->records_count, 0  );
ok( !$prec2->constraints->needs_blank_check );
is( $prec2->constraints->records_count, 1  );
ok( $prec3->constraints->needs_blank_check  );
is( $prec3->constraints->records_count, 2  );

my $ite = $prof->iterator;

isa_ok( $ite, "FormValidator::Simple::Profile::Iterator" );

my $prec4 = $ite->next;
my $prec5 = $ite->next;
my $prec6 = $ite->next;
my $prec7 = $ite->next;

is( $prec7, undef );

is( $prec4->name, 'id'   );
is( $prec5->name, 'name' );
is( $prec6->name, 'pass' );