package tests::FieldTest;
use strict;
use base qw/Lire::Test::TestCase tests::TestStoreFixture/;
use Lire::Field;
sub new {
my $self = shift()->SUPER::new( @_ );
$self->init();
$self->init_i18n();
return $self;
}
sub set_up {
my $self = shift->SUPER::set_up();
$self->set_up_locale();
$self->set_up_test_schema();
$self->{'i18n_field'} =
new Lire::Field( 'name' => 'File',
'type' => 'string',
'i18n_domain' => 'lire-test',
'description' => 'JPEG Files',
'label' => 'Downloads' );
return $self;
}
sub tear_down {
my $self = shift->SUPER::tear_down();
$self->tear_down_locale();
return $self;
}
sub test_new {
my $self = $_[0];
$self->assert_dies( qr/missing 'name' parameter/,
sub { new Lire::Field() } );
$self->assert_dies( qr/missing 'type' parameter/,
sub { new Lire::Field( 'name' => 'name' ) } );
$self->assert_dies( qr/'name' parameter should be a valid XML name: 'bad name'/,
sub { new Lire::Field( 'name' => 'bad name',
'type' => 'int') } );
$self->assert_dies( qr/'type' parameter should be a valid Lire type: 'unknown'/,
sub { new Lire::Field( 'name' => 'name',
'type' => 'unknown' ) } );
my $field = new Lire::Field( 'name' => 'field', type => 'int',
'description' => 'Description.',
'label' => 'Field Label',
);
$self->assert_isa( 'Lire::Field', $field );
$self->assert_str_equals( "field", $field->name() );
$self->assert_str_equals( "int", $field->type() );
$self->assert_null( $field->pos(), "pos attribute should be undef" );
$self->assert_str_equals( 'Field Label', $field->label() );
$self->assert_str_equals( 'Description.',
$field->description() );
$self->assert_str_equals( "lire", $field->{'i18n_domain'} );
$field = new Lire::Field( 'name' => 'field', type => 'int',
'description' => 'Description.',
'i18n_domain' => 'lire-test',
'label' => 'Field Label',
);
$self->assert_str_equals( "lire-test", $field->{'i18n_domain'} );
}
sub test_sql_type {
my $self = $_[0];
my @specials = ([ "id", "INTEGER PRIMARY KEY" ],
[ "bool", "NUMBER(1,0)" ],
[ "int", "NUMBER(10,0)" ],
[ "number", "NUMBER(10,5)" ],
[ "timestamp", "TIMESTAMP" ],
[ "date", "TIMESTAMP" ],
[ "time", "TIMESTAMP" ],
[ "duration", "NUMBER(10,1)" ],
[ "bytes", "NUMBER(10,1)" ],
);
foreach my $p ( @specials ) {
my $field = new Lire::Field( 'name' => "name", type => $p->[0],
'i18n_domain' => 'lire' );
$self->annotate( "checking " . $field->type(). "\n" );
$self->assert_str_equals( $p->[1], $field->sql_type() );
}
my @strings = qw/string hostname ip port string url email filename /;
foreach my $t ( @strings ) {
my $field = new Lire::Field( 'name' => "name", type => $t,
'i18n_domain' => 'lire' );
$self->annotate( "checking " . $field->type(). "\n" );
$self->assert_str_equals( "VARCHAR(512)", $field->sql_type() );
}
}
sub test_label_i18n {
my $self = $_[0];
my $field = $self->{'i18n_field'};
$self->assert_str_equals( 'Downloads', $field->label() );
$self->set_locale( 'fr_CA.iso8859-1' );
$self->assert_str_equals( 'Téléchargements', $field->label() );
}
sub test_label_no_label_i18n {
my $self = $_[0];
my $field = $self->{'i18n_field'};
delete $field->{'label'};
$self->assert_str_equals( 'File', $field->label() );
$self->set_locale( 'fr_CA.iso8859-1' );
$self->assert_str_equals( 'Fichier', $field->label() );
}
sub test_description_i18n {
my $self = $_[0];
my $field = $self->{'i18n_field'};
$self->assert_str_equals( 'JPEG Files', $field->description() );
$self->set_locale( 'fr_CA.iso8859-1' );
$self->assert_str_equals( 'Fichiers JPEG', $field->description() );
}
1;