The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use FindBin qw($Bin);

use Test::More tests => 28;

BEGIN 
{
  use_ok('Rose::HTML::Form::Field::Text');
  use_ok('Rose::HTML::Form::Field::Compound');
}

my $field = Rose::HTML::Form::Field::Compound->new(name => 'date');
ok(ref $field && $field->isa('Rose::HTML::Form::Field::Compound'), 'new()');

$field->localizer->load_messages_from_file("$Bin/localized-messages");

is(scalar @{ $field->children }, 0, 'children scalar 1');
is(scalar(() = $field->children), 0, 'children list 1');

my %fields =
(
  month => Rose::HTML::Form::Field::Text->new(
             name => 'month', 
             size => 2),

  day   => Rose::HTML::Form::Field::Text->new(
             name => 'day', 
             size => 2),

  year  => Rose::HTML::Form::Field::Text->new(
             name => 'year', 
             size => 4),
);

ok($field->add_fields(%fields), 'add_fields()');

is(scalar @{ $field->children }, 0, 'children scalar 2');
is(scalar(() = $field->children), 0, 'children list 2');

is($field->field('month'), $fields{'month'}, 'field() set with field hash');

#is($field->field('date.month'), $fields{'month'}, 'field() addressing');

$field->init_fields(month => 12, day => 25, year => 1980);

is($field->field_value('day'), 25, 'field_value() 1');

is($field->html,
   qq(<input name="date.day" size="2" type="text" value="25">) .
   qq(<input name="date.month" size="2" type="text" value="12">) .
   qq(<input name="date.year" size="4" type="text" value="1980">), 'html()');

is($field->html_field,
   qq(<input name="date.day" size="2" type="text" value="25">) .
   qq(<input name="date.month" size="2" type="text" value="12">) .
   qq(<input name="date.year" size="4" type="text" value="1980">), 'html_field()');

is($field->xhtml,
   qq(<input name="date.day" size="2" type="text" value="25" />) .
   qq(<input name="date.month" size="2" type="text" value="12" />) .
   qq(<input name="date.year" size="4" type="text" value="1980" />), 'xhtml()');

is($field->xhtml_field,
   qq(<input name="date.day" size="2" type="text" value="25" />) .
   qq(<input name="date.month" size="2" type="text" value="12" />) .
   qq(<input name="date.year" size="4" type="text" value="1980" />), 'xhtml_field()');

is(join("\n", map { $_->html_field } $field->fields),
   qq(<input name="date.day" size="2" type="text" value="25">\n) .
   qq(<input name="date.month" size="2" type="text" value="12">\n) .
   qq(<input name="date.year" size="4" type="text" value="1980">), 'html field test');

is($field->html_hidden_fields,
   qq(<input name="date.day" type="hidden" value="25">\n) .
   qq(<input name="date.month" type="hidden" value="12">\n) .
   qq(<input name="date.year" type="hidden" value="1980">),
   'html_hidden_fields()');

is($field->xhtml_hidden_fields,
   qq(<input name="date.day" type="hidden" value="25" />\n) .
   qq(<input name="date.month" type="hidden" value="12" />\n) .
   qq(<input name="date.year" type="hidden" value="1980" />),
   'mdy xhtml_hidden_fields()');

is($field->html_hidden_field,
   qq(<input name="date.day" type="hidden" value="25">\n) .
   qq(<input name="date.month" type="hidden" value="12">\n) .
   qq(<input name="date.year" type="hidden" value="1980">),
   'html_hidden_field() 1');

is($field->xhtml_hidden_field,
   qq(<input name="date.day" type="hidden" value="25" />\n) .
   qq(<input name="date.month" type="hidden" value="12" />\n) .
   qq(<input name="date.year" type="hidden" value="1980" />),
   'mdy xhtml_hidden_field() 1');

{
  no warnings;
  *Rose::HTML::Form::Field::Compound::output_value = sub { '12/25/1980' };
}

is($field->html_hidden_field,
   qq(<input name="date" type="hidden" value="12/25/1980">),
   'html_hidden_field() 2');

is($field->xhtml_hidden_field,
   qq(<input name="date" type="hidden" value="12/25/1980" />),
   'xhtml_hidden_field() 2');

$field->clear();

is(join("\n", map { $_->html_field } $field->fields),
   qq(<input name="date.day" size="2" type="text" value="">\n) .
   qq(<input name="date.month" size="2" type="text" value="">\n) .
   qq(<input name="date.year" size="4" type="text" value="">), 'clear()');

my $id = ref($field)->localizer->add_localized_message( 
  name => 'DAY_FIELD_LABEL',
  text => 
  {
    en => 'Day',
    xx => 'Le Day',
  });

$field->field('day')->label_id($id);
$field->required(1);
$field->field('month')->required(1);
$field->field('month')->input_value(2);
$field->validate;

is($field->error, 'Missing Day, year.', 'error 1');

$field->locale('xx');
is($field->error, 'Missing Le Day : year.', 'error 2');

$field->locale('fr');
is($field->error, 'Les champs Day, year manquent.', 'error 3');

$field->field('year')->input_value(2000);
$field->validate;

$field->locale('en');
is($field->error, 'Missing Day.', 'error 4');

$field->locale('xx');
is($field->error, 'Missing Le Day.', 'error 5');

$field->locale('fr');
is($field->error, 'Le champ Day manque.', 'error 6');