package tests::LrFirstTest;
use strict;
use base qw/Lire::Test::TestCase/;
use Lire::SQLExt::LrFirst;
sub set_up {
my $self = shift()->SUPER::set_up();
$self->{'lr_first'} = new Lire::SQLExt::LrFirst();
$self->{'lr_first_key'} = new Lire::SQLExt::LrFirst( 'key' );
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
return;
}
sub test_new {
my $self = $_[0];
$self->assert_null( $self->{'lr_first'}{'_value'},
'_value should be undefined' );
$self->assert_deep_equals( [], $self->{'lr_first'}{'_sort_values'} );
$self->assert_deep_equals( [], $self->{'lr_first'}{'_sort_str'} );
$self->assert_equals( 'value', $self->{'lr_first'}{'_return'} );
$self->assert_equals( 'key', $self->{'lr_first_key'}{'_return'} );
$self->assert_deep_equals( $self->{'lr_first'},
$self->{'lr_first'}->new() );
$self->assert_deep_equals( $self->{'lr_first_key'},
$self->{'lr_first_key'}->new() );
}
sub test_is_number {
my $self = $_[0];
my @tests = ( [ 0, 1 ], [ '0', 1 ], [ 0xFF, 1 ],
[ 'abcde', 0 ], [ '0astring', 0 ],
[ '0xFF', 0 ] );
foreach my $t ( @tests ) {
if ( $t->[1] ) {
$self->assert( Lire::SQLExt::LrFirst::is_number( $t->[0] ),
"is_number( $t->[0] ) should be true" );
} else {
$self->assert( ! Lire::SQLExt::LrFirst::is_number( $t->[0] ),
"is_number( $t->[0] ) should be false" );
}
}
}
sub test_step_nosortkeys {
my $self = $_[0];
my $aggr = $self->{'lr_first'};
$aggr->step( undef );
$self->assert_null( $aggr->{'_value'}, 'value should be undef' );
$aggr->step( 'abcde' );
$self->assert_equals( 'abcde', $aggr->{'_value'} );
$aggr->step( '0123' );
$self->assert_equals( 'abcde', $aggr->{'_value'} );
}
sub test_step {
my $self = $_[0];
my $aggr = $self->{'lr_first'};
$aggr->step( undef, 'host1', 10 );
$self->assert_null( $aggr->{'_value'},
"'_value' attribute should be undef" );
$aggr->step( 'user1', undef, 10 );
$self->assert_null( $aggr->{'_value'},
"'_value' attribute should be undef" );
$aggr->step( 'user1', 'host1', 'user1' );
$self->assert_equals( 'user1', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', 'user1' ], $aggr->{'_sort_values'} );
$aggr->step( 'user1', undef, 'user1' );
$self->assert_equals( 'user1', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', 'user1' ], $aggr->{'_sort_values'} );
$aggr->step( 'user2', 'host1', 'abcde' );
$self->assert_equals( 'user2', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', 'abcde' ], $aggr->{'_sort_values'} );
$aggr->step( 'user3', 'ahost', 'user1' );
$self->assert_equals( 'user3', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'ahost', 'user1' ], $aggr->{'_sort_values'} );
$aggr->step( 'user5', 'ahost', 10 );
$self->assert_equals( 'user5', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'ahost', '10' ], $aggr->{'_sort_values'} );
}
sub test_step_num {
my $self = $_[0];
my $aggr = $self->{'lr_first'};
$aggr->step( 'user1', 'host1', '1024' );
$self->assert_equals( 'user1', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 0 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', 1024 ], $aggr->{'_sort_values'} );
$aggr->step( 'user0', 'host1', '512' );
$self->assert_equals( 'user0', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 0 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', 512 ], $aggr->{'_sort_values'} );
$aggr->step( 'usera', 'host1', '0a512' );
$self->assert_equals( 'usera', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', '0a512' ], $aggr->{'_sort_values'} );
$aggr->step( 'userb', 'host1', '0512' );
$self->assert_equals( 'userb', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', '0512' ], $aggr->{'_sort_values'} );
}
sub test_finalize {
my $self = $_[0];
$self->{'lr_first'}{'_value'} = 10;
$self->assert_num_equals( 10, $self->{'lr_first'}->finalize() );
$self->{'lr_first_key'}{'_sort_values'} = [ 'test', 'test1'];
$self->assert_str_equals( 'test test1',
$self->{'lr_first_key'}->finalize() );
$self->{'lr_first_key'}{'_sort_values'} = [];
$self->assert_str_equals( '', $self->{'lr_first_key'}->finalize() );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1