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 => 23;

use Rose::HTML::Object::Errors qw(:phone);

BEGIN 
{
  use_ok('Rose::HTML::Form::Field::PhoneNumber::US');
  use_ok('Rose::HTML::Form::Field::PhoneNumber::US::Split');
}

#
# Rose::HTML::Form::Field::PhoneNumber::US
#

my $field = Rose::HTML::Form::Field::PhoneNumber::US->new(
  name        => 'phone',  
  value       => '555-555-5555',
  default     => '555-123-1234');

ok(ref $field eq 'Rose::HTML::Form::Field::PhoneNumber::US', 'US new()');

is($field->internal_value, '555-555-5555', 'US internal_value() 1');

$field->clear;

is($field->html_field, '<input maxlength="14" name="phone" size="15" type="text" value="">', 'US html_field() 1');
is($field->xhtml_field, '<input maxlength="14" name="phone" size="15" type="text" value="" />', 'US xhtml_field() 1');

$field->reset;

is($field->internal_value, '555-123-1234', 'US reset()');

$field->input_value(' ( 123) 456 7890 ');

is($field->internal_value, '123-456-7890', 'US internal_value() 2');

#
# Rose::HTML::Form::Field::PhoneNumber::US::Split
#

$field = Rose::HTML::Form::Field::PhoneNumber::US::Split->new(
  name        => 'phone',  
  value       => '555-456-5555',
  default     => '123-321-1234');

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

is($field->html_field, 
  '<span class="phone">' .
  '<input class="area-code" maxlength="3" name="phone.area_code" size="3" type="text" value="555">-' .
  '<input class="exchange" maxlength="3" name="phone.exchange" size="3" type="text" value="456">-' .
  '<input class="number" maxlength="4" name="phone.number" size="4" type="text" value="5555"></span>',
  'US::Split  html_field() 1');

is($field->xhtml_field,
  '<span class="phone">' .
  '<input class="area-code" maxlength="3" name="phone.area_code" size="3" type="text" value="555" />-' .
  '<input class="exchange" maxlength="3" name="phone.exchange" size="3" type="text" value="456" />-' .
  '<input class="number" maxlength="4" name="phone.number" size="4" type="text" value="5555" /></span>',
  'US::Split xhtml_field() 1');

is($field->internal_value, '555-456-5555', 'US::Split internal_value() 1');

$field->clear;

is($field->html_field, 
  '<span class="phone">' .
  '<input class="area-code" maxlength="3" name="phone.area_code" size="3" type="text" value="">-' .
  '<input class="exchange" maxlength="3" name="phone.exchange" size="3" type="text" value="">-' .
  '<input class="number" maxlength="4" name="phone.number" size="4" type="text" value=""></span>',
  'US::Split html_field() 2');

$field->reset;

is($field->internal_value, '123-321-1234', 'US::Split reset()');

$field->input_value(' ( 123) 456 7890 ');

is($field->internal_value, '123-456-7890', 'US::Split internal_value() 2');

# Test subfield population

$field->clear;

$field->field('area_code')->input_value(555);

ok(!defined $field->internal_value, 'US::Split area code only');

$field->field('exchange')->input_value(123);

ok(!defined $field->internal_value, 'US::Split area code and exchange');

$field->reset;

is($field->internal_value, '123-321-1234', 'US::Split partial reset()');

$field->clear;

$field->field('exchange')->input_value(123);

ok(!defined $field->internal_value, 'US::Split exchange only');

$field->field('area_code')->input_value(555);
$field->field('number')->input_value(4567);

is($field->internal_value, '555-123-4567', 'US::Split area code, exchange, and number');

$field->input_value(123);
$field->validate;
ok($field->has_error, 'has_error 1');
is($field->error_id, PHONE_INVALID, 'error_id 1');
is($field->error, 'Phone number must be 10 digits, including area code.', 'error 1');