package tests::ReportColumnInfoTest;
use strict;
use base qw/Lire::Test::TestCase/;
use Lire::Report::TableInfo;
sub set_up {
my $self = shift->SUPER::set_up();
$self->{'table_info'} = new Lire::Report::TableInfo();
$self->{'num_col_info'} =
new Lire::Report::ColumnInfo( $self->{'table_info'},
'test', 'numerical',
'int', 'A Label' );
return $self;
}
sub tear_down {
my $self = shift->SUPER::tear_down();
return $self;
}
sub test_new {
my $self = $_[0];
my @arg_names = ( 'group_info', 'name', 'class', 'type' );
my @args = ( $self->{'table_info'}, 'test', 'categorical', 'string' );
for ( my $i=0; $i < @arg_names; $i++ ) {
my @args = ($i == 0) ? () : @args[0..($i-1)];
$self->assert_died( sub { new Lire::Report::ColumnInfo( @args ) },
qr/missing '$arg_names[$i]' parameter/ );
}
$self->assert_died( sub { new Lire::Report::ColumnInfo( $self->{'table_info'},
'invalid%',
'categorical',
'string' ) },
qr/'name' parameter isn't a valid XML name: 'invalid%'/ );
$self->assert_died( sub { new Lire::Report::ColumnInfo( {},
'test',
'categorical',
'string' ) },
qr/\'group_info\' parameter should be a \'Lire::Report::GroupInfo\' instance, not \'HASH/ );
$self->assert_died( sub { new Lire::Report::ColumnInfo( $self->{'table_info'},
'test',
'invalid',
'string' ) },
qr/'class' parameter should either be 'numerical' or 'categorical'/ );
$self->assert_died( sub { new Lire::Report::ColumnInfo( $self->{'table_info'},
'test',
'categorical',
'nosuchtype' ) },
qr/'type' parameter isn't a valid Lire type: 'nosuchtype'/ );
my $col_info = new Lire::Report::ColumnInfo( $self->{'table_info'},
'test', 'categorical',
'string', 'A Label' );
$self->assert_not_null( $col_info,
"new() returned undef" );
$self->assert_isa( 'Lire::Report::ColumnInfo', $col_info );
$self->assert_equals( "test", $col_info->name() );
$self->assert_equals( "categorical", $col_info->class() );
$self->assert_equals( "string", $col_info->type() );
$self->assert_equals( $self->{'table_info'}, $col_info->group_info() );
$self->assert_equals( 'A Label', $col_info->label() );
$self->assert_null( $col_info->{'max_chars'},
'max_chars() should be undef' );
$self->assert_null( $col_info->{'index'},
"'index' attribute should be undef" );
$self->assert_equals( 0, $col_info->{'col_width'} );
$self->assert_equals( 0, $col_info->{'padding'} );
$self->assert_null( $col_info->{'avg_chars'},
"'avg_chars' attribute should be undef" );
}
sub test_avg_chars {
my $self = $_[0];
my $col_info = $self->{'num_col_info'};
$self->assert_died( sub { $col_info->avg_chars() },
qr/avg_chars\(\) called while stat is undefined. Was subreport's finalize\(\) called\?/ );
$col_info->avg_chars( 10 );
$self->assert_equals( 10, $col_info->{'avg_chars'} );
$self->assert_equals( 10, $col_info->avg_chars() );
}
sub test_max_chars {
my $self = $_[0];
my $col_info = $self->{'num_col_info'};
$self->assert_died( sub { $col_info->max_chars() },
qr/max_chars\(\) called while stat is undefined. Was subreport's finalize\(\) called\?/ );
$col_info->max_chars( 10 );
$self->assert_equals( 10, $col_info->{'max_chars'} );
$self->assert_equals( 10, $col_info->max_chars() );
}
sub test_label {
my $self = $_[0];
my $col_info = $self->{'num_col_info'};
$self->assert_equals( 'A Label', $col_info->label() );
$col_info->label( undef );
$self->assert_null( $col_info->{'label'}, "'label' should be undef" );
$self->assert_equals( 'test', $col_info->label() );
$self->assert_equals( 'New label', $col_info->label( 'New label' ) );
}
sub test_init_chars_stats {
my $self = $_[0];
my $col_info = $self->{'num_col_info'};
$col_info->init_chars_stats();
$self->assert_equals( 0, $col_info->{'total_chars'} );
$self->assert_equals( 0, $col_info->{'column_count'} );
$self->assert_equals( length( $col_info->label() ),
$col_info->{'max_chars'} );
}
sub test_finish_chars_stats {
my $self = $_[0];
my $col_info = $self->{'num_col_info'};
$col_info->{'total_chars'} = 10;
$col_info->{'column_count'} = 2;
$col_info->finish_chars_stats();
$self->assert_equals( 6, $col_info->avg_chars() );
$self->assert_equals( 6, $col_info->{'avg_chars'} );
$self->assert_null( $col_info->{'total_chars'},
"'total_chars' attribute should be removed" );
$self->assert_null( $col_info->{'column_count'},
"'column_count' attribute should be removed" );
$self->assert_equals( 6, $col_info->avg_chars() );
$col_info->avg_chars( 8 );
$self->assert_equals( 8, $col_info->{'avg_chars'} );
}
sub test_update_chars_stats {
my $self = $_[0];
my $col_info = $self->{'num_col_info'};
$self->assert_null( $col_info->{'total_chars'},
"'total_chars' attribute should be undef" );
$self->assert_null( $col_info->{'column_count'},
"'column_count' attribute should be undef" );
my $len1 = length 'A longer value';
$col_info->init_chars_stats();
$col_info->update_chars_stats( 'A longer value' );
$self->assert_equals( $len1, $col_info->{'total_chars'} );
$self->assert_equals( $len1, $col_info->{'max_chars'} );
$self->assert_equals( 1, $col_info->{'column_count'} );
my $len2 = length 'A short';
$col_info->update_chars_stats( 'A short' );
$self->assert_equals( $len1+$len2, $col_info->{'total_chars'} );
$self->assert_equals( $len1, $col_info->{'max_chars'} );
$self->assert_equals( 2, $col_info->{'column_count'} );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1