package tests::RangegroupTest;
use strict;
use base qw/Lire::Test::TestCase tests::TestStoreFixture/;
use Lire::Rangegroup;
use Lire::ReportSpec;
use Lire::Report::Group;
use Lire::Report::TableInfo;
use Lire::DlfQuery;
sub new {
my $self = shift()->SUPER::new( @_ );
$self->init();
return $self;
}
sub set_up {
my $self = shift->SUPER::set_up();
$self->set_up_test_schema();
$self->{'spec'} = new Lire::ReportSpec();
$self->{'spec'}->superservice( 'test' );
$self->{'spec'}->id( 'rangegroup-test' );
$self->{'cfg'}{'lr_scale_numbers'} = 1;
$self->{'cfg'}{'lr_scale_bytes'} = 1;
$self->{'cfg'}{'lr_scale_seconds'} = 1;
$self->{'rangegroup5'} =
new Lire::Rangegroup( 'report_spec' => $self->{'spec'},
'range-size' => '10k',
'field' => 'file_size',
'label' => 'Range',
);
$self->{'rangegroup5_min'} =
new Lire::Rangegroup( 'report_spec' => $self->{'spec'},
'range-size' => '10k',
'range-start' => '1k',
'min-value' => 0,
'max-value' => '10k',
'field' => 'file_size',
'label' => 'Range',
);
$self->{'rangegroup5_geo'} =
new Lire::Rangegroup( 'report_spec' => $self->{'spec'},
'size-scale' => 5,
'range-size' => '1k',
'field' => 'file_size',
'label' => 'Range', );
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down( @_ );
return;
}
sub test_name {
my $self = $_[0];
$self->assert_equals( 'rangegroup:file_size',
$self->{'rangegroup5'}->name() );
}
sub test_create_categorical_info {
my $self = $_[0];
my $info = new Lire::Report::TableInfo();
$self->{'rangegroup5'}->create_categorical_info( $info );
my @cols = $info->children();
$self->assert_equals( 1, scalar @cols );
my $col = $cols[0];
$self->assert_equals( 'categorical', $col->class() );
$self->assert_equals( 'rangegroup:file_size', $col->name() );
$self->assert_equals( 'bytes', $col->type() );
$self->assert_equals( 'Range', $col->label() );
}
sub test_build_query {
my $self = $_[0];
foreach my $t ( [ '5', 'lr_rangegroup(file_size,0,10240,NULL,NULL)' ],
[ '5_min', 'lr_rangegroup(file_size,1024,10240,0,10240)' ],
[ '5_geo', 'lr_rangegroup_geo(file_size,0,1024,5,NULL,NULL)' ] )
{
my $rangegroup = $self->{ 'rangegroup' . $t->[0] };
$rangegroup->{'field'} = 'file_size';
my $e_query = new Lire::DlfQuery( 'test' );
$e_query->add_aggr_field( '_lr_nrecords', 'count(*)' );
$e_query->add_group_field( 'rangegroup:file_size', $t->[1] );
$e_query->set_sort_spec( 'rangegroup:file_size' );
my $query = new Lire::DlfQuery( 'test' );
$rangegroup->build_query( $query );
$self->assert_deep_equals( $e_query, $query );
}
}
sub test_param_value {
my $self = $_[0];
my $op = $self->{'rangegroup5'};
$op->{'field'} = 'file_size';
$op->{'range-start'} = '1k';
$self->assert_equals( 1024, $op->_param_value( 'range-start' ) );
$op->{'field'} = 'time_taken';
$op->{'range-min'} = '10s';
$self->assert_equals( 10, $op->_param_value( 'range-min' ) );
}
sub test_create_entry {
my $self = $_[0];
my $info = new Lire::Report::TableInfo();
$self->{'rangegroup5'}->create_categorical_info( $info );
foreach my $t ( [ '5', '[0k-10k>', 0, 10240 ],
[ '5_min', '[1k-11k>', 1024, 10240 ],
[ '5_geo', '[0k-1k>>', 0, 1024 ],
[ '5_geo', '[1k-6k>', 1024, 5*1024 ], )
{
my ( $range, $fmt_value, $value, $length ) = @$t;
my $rangegroup = $self->{ 'rangegroup' . $range};
my $dlf = { 'rangegroup:file_size' => $value };
my $group = new Lire::Report::Group( bless( {}, 'Lire::Report::Entry'),
$info );
my $entry = $rangegroup->create_entry( $group, $dlf );
$self->assert_not_null( $entry, "create_entry() returned undef" );
my @data = $entry->data();
$self->assert_equals( 1, scalar @data );
$self->assert_equals( $fmt_value, $data[0]->{'content'} );
$self->assert_equals( $value, $data[0]->{'value'} );
$self->assert_equals( $length, $data[0]->{'range'} );
}
}
sub test_create_entry_mc {
my $self = $_[0];
my $rangegroup = $self->{'rangegroup5'};
my $info = new Lire::Report::TableInfo();
$rangegroup->create_categorical_info( $info );
my $group = new Lire::Report::Group( bless( {}, 'Lire::Report::Entry'),
$info );
my $entry = $rangegroup->create_entry( $group,
{ 'rangegroup:file_size' => undef,
'_lr_nrecords' => 24 } );
$self->assert_null( $entry, "create_entry() should have returned undef" );
$self->assert_equals( 24, $group->missing_cases() );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1