#!/usr/bin/perl -w
use strict;
use Test::More tests => 43;
use FindBin qw($Bin);
use lib "$Bin/lib";
use Rose::HTML::Object::Errors qw(CUSTOM_ERROR FIELD_REQUIRED);
use Rose::HTML::Object::Messages qw(CUSTOM_MESSAGE FIELD_REQUIRED_GENERIC);
BEGIN
{
use_ok('Rose::HTML::Form::Field');
use_ok('MyField');
}
use MyObject::Messages qw(:all);
my $o = MyField->new;
$o->localize_label;
$o->localize_description;
is($o->label, 'Dog', 'localized label 1');
$o->locale('xx');
is($o->label, 'Chien', 'localized label 2');
MyField->localizer->add_localized_message_text(
name => 'FIELD_LABEL',
text =>
{
en => 'Cat',
xx => 'Chat',
});
is($o->label, 'Chat', 'localized label 3');
$o->locale('en');
is($o->label, 'Cat', 'localized label 4');
$o->label('Cow');
is($o->label, 'Cow', 'unlocalized label 1');
$o->locale('xx');
is($o->label, 'Cow', 'unlocalized label 2');
if($^V lt v5.8.7)
{
if($^V ge v5.8.0)
{
no warnings 'uninitialized';
my $desc = $o->description;
is("$desc", '', 'localized description 1 (5.8.0-7)');
}
else
{
# XXX: This causes perl 5.6.x to segfault on me. Blah.
#is("$desc", '', 'localized description 1 (<5.8.7)');
#no warnings 'uninitialized';
#my $desc = $o->description;
SKIP: { skip('localized description in perl < 5.8.7', 1); }
}
}
else
{
# XXX: This works fine for me in 5.8.8...
# XXX: Now (7/16/07) set to empty string. Dunno if bug remains.
is($o->description, '', 'localized description 1 (5.8.8+)');
}
my $id = MyField->localizer->add_localized_message(
name => 'EMAIL_FIELD_LABEL',
text =>
{
en => 'Email',
xx => 'Courriel',
});
$o->label_message_id($id);
$o->locale('en');
is($o->label, 'Email', 'new localized label 1');
$o->locale('xx');
is($o->label, 'Courriel', 'new localized label 2');
$id = MyField->localizer->add_localized_message(
name => 'NAME_FIELD_LABEL',
text =>
{
en => 'Name',
xx => 'Nom',
});
#$Rose::HTML::Object::Exporter::Debug = 1;
MyField->localizer->import_message_ids(':all');
#$Rose::HTML::Object::Exporter::Debug = 0;
$o->label_message_id(NAME_FIELD_LABEL());
$o->locale('en');
is($o->label, 'Name', 'new localized label 3');
$o->locale('xx');
is($o->label, 'Nom', 'new localized label 4');
$o->locale('en');
# has_error(s)
ok(!$o->has_error, 'has_error 1');
ok(!$o->has_errors, 'has_errors 1');
# errors
$o->errors('Error one', 'Error two');
ok($o->has_error, 'has_error 2');
ok($o->has_errors, 'has_errors 2');
my @errors = $o->errors;
is(scalar @errors, 2, 'errors 1');
is_deeply([ map { "$_" } @errors ], [ 'Error one', 'Error two' ], 'errors 2');
is_deeply([ map { $_->id } @errors ], [ CUSTOM_ERROR, CUSTOM_ERROR ], 'errors 3');
my $error = $o->error;
is($error->id, CUSTOM_ERROR, 'errors 4');
# error_id
is($o->error_id, CUSTOM_ERROR, 'error_id 1');
is_deeply([ $o->error_ids ], [ CUSTOM_ERROR, CUSTOM_ERROR ], 'error_ids 1');
# add_error
$o->add_error(FIELD_REQUIRED);
@errors = $o->errors;
is_deeply([ map { "$_" } @errors ], [ 'Error one', 'Error two', 'This is a required field.' ], 'add_error 1');
is_deeply([ map { $_->id } @errors ], [ CUSTOM_ERROR, CUSTOM_ERROR, FIELD_REQUIRED ], 'add_error 2');
# add_error_ids
$o->errors(FIELD_REQUIRED, 'Error two');
$o->add_error_ids(FIELD_REQUIRED, FIELD_REQUIRED);
@errors = $o->errors;
is_deeply([ map { "$_" } @errors ], [ 'This is a required field.', 'Error two',
'This is a required field.', 'This is a required field.' ], 'add_error_ids 1');
is_deeply([ map { $_->id } @errors ], [ FIELD_REQUIRED, CUSTOM_ERROR, FIELD_REQUIRED, FIELD_REQUIRED ], 'add_error_ids 2');
# add_error_id
$o->errors(FIELD_REQUIRED, 'Error two');
$o->add_error_id(FIELD_REQUIRED);
@errors = $o->errors;
is_deeply([ map { "$_" } @errors ], [ 'This is a required field.', 'Error two',
'This is a required field.', ], 'add_error_id 1');
is_deeply([ map { $_->id } @errors ], [ FIELD_REQUIRED, CUSTOM_ERROR, FIELD_REQUIRED, ], 'add_error_id 2');
ok($o->has_error, 'has_error 3');
ok($o->has_errors, 'has_errors 3');
$o->error('Foo');
@errors = $o->errors;
is(scalar @errors, 1, 'error 1');
ok($o->has_error, 'has_error 4');
ok($o->has_errors, 'has_errors 4');
$o->error(undef);
ok(!$o->has_error, 'has_error 5');
ok(!$o->has_errors, 'has_errors 5');
$o->errors('foo', 'bar');
$o->errors(undef);
ok(!$o->has_error, 'has_error 6');
ok(!$o->has_errors, 'has_errors 6');
$o->errors('foo');
$o->errors([]);
ok(!$o->has_error, 'has_error 7');
ok(!$o->has_errors, 'has_errors 7');
$o->error_label('Foo');
$o->required(1);
$o->clear;
$o->validate;
is($o->error, 'Foo is a required field.', 'error label 1');
$o->error_label('');
$o->validate;
is($o->error, 'This is a required field.', 'error label 2');
$o = Rose::HTML::Form::Field->new(name => 'test', required => 1);
$o->locale('bg');
$o->validate;
$error = $o->error;
# XXX: This fails for mysterious reasons in some installations of perl
#is(length($error), 25, 'localized error length');
is(length("$error"), 25, 'localized error length');
#is(length($error->message->as_string), 25, 'localized error length');