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 Test::More tests => 20;

BEGIN 
{
  use_ok('Rose::HTML::Form::Field::Time::Split::HourMinuteSecond');
}

my $field = Rose::HTML::Form::Field::Time::Split::HourMinuteSecond->new(
  label       => 'Time', 
  description => 'Some Time',
  name        => 'time',
  value       => ' 12:34:56p.m.',
  default     => '8am');

ok(ref $field eq 'Rose::HTML::Form::Field::Time::Split::HourMinuteSecond', 'new()');

is($field->html_field, 
  '<span class="time">' .
  '<input class="hour" maxlength="2" name="time.hour" size="2" type="text" value="12">:' .
  '<input class="minute" maxlength="2" name="time.minute" size="2" type="text" value="34">:' .
  '<input class="second" maxlength="2" name="time.second" size="2" type="text" value="56">' .
  qq(<select class="ampm" name="time.ampm" size="1">\n) .
  qq(<option value=""></option>\n) .
  qq(<option value="AM">AM</option>\n) .
  qq(<option selected value="PM">PM</option>\n) .
  '</select></span>',
  'html_field() 1');

is($field->xhtml_field, 
  '<span class="time">' .
  '<input class="hour" maxlength="2" name="time.hour" size="2" type="text" value="12" />:' .
  '<input class="minute" maxlength="2" name="time.minute" size="2" type="text" value="34" />:' .
  '<input class="second" maxlength="2" name="time.second" size="2" type="text" value="56" />' .
  qq(<select class="ampm" name="time.ampm" size="1">\n) .
  qq(<option value=""></option>\n) .
  qq(<option value="AM">AM</option>\n) .
  qq(<option selected="selected" value="PM">PM</option>\n) .
  '</select></span>',
  'xhtml_field() 1');

$field->clear;

is($field->internal_value, undef, 'internal_value() 1');

is($field->html_field, 
  '<span class="time">' .
  '<input class="hour" maxlength="2" name="time.hour" size="2" type="text" value="">:' .
  '<input class="minute" maxlength="2" name="time.minute" size="2" type="text" value="">:' .
  '<input class="second" maxlength="2" name="time.second" size="2" type="text" value="">' .
  qq(<select class="ampm" name="time.ampm" size="1">\n) .
  qq(<option value=""></option>\n) .
  qq(<option value="AM">AM</option>\n) .
  qq(<option value="PM">PM</option>\n) .
  '</select></span>',
  'html_field() 2');

$field->reset;

is($field->internal_value, '08:00:00 AM', 'internal_value() 2');

is($field->html_field, 
  '<span class="time">' .
  '<input class="hour" maxlength="2" name="time.hour" size="2" type="text" value="08">:' .
  '<input class="minute" maxlength="2" name="time.minute" size="2" type="text" value="00">:' .
  '<input class="second" maxlength="2" name="time.second" size="2" type="text" value="00">' .
  qq(<select class="ampm" name="time.ampm" size="1">\n) .
  qq(<option value=""></option>\n) .
  qq(<option selected value="AM">AM</option>\n) .
  qq(<option value="PM">PM</option>\n) .
  '</select></span>',
  'html_field() 3');

$field->input_value('foo');
is($field->error, undef, 'error() 1');

is($field->validate, 0, 'validate() 1');
ok($field->error =~ /\S/, 'error() 2');

is($field->internal_value, 'foo', 'internal_value() 3');
is($field->input_value, 'foo', 'input_value() 1');
is($field->output_value, 'foo', 'output_value() 1');

# Test subfield population

$field->clear;

$field->field('minute')->input_value(34);

ok(!defined $field->internal_value, 'minute only');

$field->field('second')->input_value(56);

ok(!defined $field->internal_value, 'minute and second');

$field->reset;

is($field->internal_value, '08:00:00 AM', 'partial reset()');

$field->clear;

$field->field('hour')->input_value(12);

ok(!defined $field->internal_value, 'hour only');

$field->field('ampm')->input_value('PM');

is($field->internal_value, '12:00:00 PM', 'hour and am/pm');

$field->clear;
$field->field('ampm')->input_value('PM');
$field->field('hour')->input_value(' ');

ok(!defined $field->internal_value, 'invalid hour');