package tests::LrLastTest;
use strict;
use base qw/Lire::Test::TestCase/;
use Lire::SQLExt::LrLast;
sub set_up {
my $self = shift()->SUPER::set_up();
$self->{'lr_last'} = new Lire::SQLExt::LrLast();
$self->{'lr_last_key'} = new Lire::SQLExt::LrLast( 'key' );
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
return;
}
sub test_new {
my $self = $_[0];
$self->assert_null( $self->{'lr_last'}{'_value'},
'_value should be undefined' );
$self->assert_deep_equals( [], $self->{'lr_last'}{'_sort_values'} );
$self->assert_deep_equals( [], $self->{'lr_last'}{'_sort_str'} );
$self->assert_str_equals( 'key', $self->{'lr_last_key'}{'_return'} );
$self->assert_deep_equals( $self->{'lr_last'},
$self->{'lr_last'}->new() );
$self->assert_deep_equals( $self->{'lr_last_key'},
$self->{'lr_last_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::LrLast::is_number( $t->[0] ),
"is_number( $t->[0] ) should be true" );
} else {
$self->assert( ! Lire::SQLExt::LrLast::is_number( $t->[0] ),
"is_number( $t->[0] ) should be false" );
}
}
}
sub test_step_nosortkeys {
my $self = $_[0];
my $aggr = $self->{'lr_last'};
$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( '0123', $aggr->{'_value'} );
}
sub test_step {
my $self = $_[0];
my $aggr = $self->{'lr_last'};
$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( 'user1', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', 'user1' ], $aggr->{'_sort_values'} );
$aggr->step( 'user3', 'host2', 'user1' );
$self->assert_equals( 'user3', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host2', 'user1' ], $aggr->{'_sort_values'} );
}
sub test_step_num {
my $self = $_[0];
my $aggr = $self->{'lr_last'};
$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( '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( 'usera', 'host1', '2a512' );
$self->assert_equals( 'usera', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', '2a512' ], $aggr->{'_sort_values'} );
$aggr->step( 'userb', 'host1', '512' );
$self->assert_equals( 'userb', $aggr->{'_value'} );
$self->assert_deep_equals( [ 1, 1 ], $aggr->{'_sort_str'} );
$self->assert_deep_equals( [ 'host1', '512' ], $aggr->{'_sort_values'} );
}
sub test_finalize {
my $self = $_[0];
$self->{'lr_last'}{'_value'} = 10;
$self->assert_num_equals( 10, $self->{'lr_last'}->finalize() );
$self->{'lr_last_key'}{'_sort_values'} = [ 'test', 'test1'];
$self->assert_str_equals( 'test test1',
$self->{'lr_last_key'}->finalize() );
$self->{'lr_last_key'}{'_sort_values'} = [];
$self->assert_str_equals( '', $self->{'lr_last_key'}->finalize() );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1