package tests::LrTimegroupTest;
use strict;
use base qw/Lire::Test::TestCase/;
use Lire::SQLExt::LrTimegroup;
use POSIX qw/strftime tzset/;
sub test_lr_timegroup_sec {
my $self = $_[0];
my @tests =
(
[ '2003-10-13 14:00 EDT', 1066068720, 3600, 1066068000 ],
[ '2003-10-13 14:00 EDT', 1066068720.100, 3600, 1066068000 ],
[ '2003-10-13 14:12 EDT', 1066069440, 3600, 1066068000 ],
[ '2003-10-13 14:59:59 EDT', 1066071599, 3600, 1066068000 ],
[ '2003-10-13 15:59:59 EDT', 1066075199, 3600, 1066071600 ],
[ '2003-10-13 20:12 EDT', 1066090320, 4*3600, 1066089600 ],
[ '2003-10-13 23:15 EDT', 1066101300, 4*3600, 1066089600 ],
[ '2003-10-14 00:15 EDT', 1066104900, 4*3600, 1066104000 ],
);
$self->assert_null( Lire::SQLExt::LrTimegroup::lr_timegroup_sec( undef, 3600 ),
"lr_timegroup_sec( undef ) should return undef" );
foreach my $t ( @tests ) {
my ( $date, $epoch, $period_size, $result ) = @$t;
my $r =
Lire::SQLExt::LrTimegroup::lr_timegroup_sec( $epoch, $period_size);
my $result_fmt = strftime( '%Y-%m-%d %H:%M', localtime $result );
my $r_fmt = strftime( '%Y-%m-%d %H:%M', localtime $r );
$self->assert_equals( $result, $r,
"lr_timegroup_sec( '$date', $period_size ) returned $r_fmt, expected $result_fmt" );
}
}
sub test_lr_timegroup_day {
my $self = $_[0];
my @tests = ( [ '2003-10-14 00:15 EST', 'EST', 1066104900, 1066107600 ],
[ '2003-10-14 00:15 EST', 'EST', 1066104900.367, 1066107600],
[ '2003-07-14 23:15 CET', 'CET', 1058217300, 1058133600 ],
[ '2003-12-12 23:15 CET', 'CET', 1071267300, 1071183600 ],
[ '2003-10-14 00:15 UTC', 'UTC', 1066090500, 1066089600 ] );
$self->assert_null( Lire::SQLExt::LrTimegroup::lr_timegroup_day( undef ),
"lr_timegroup_day( undef ) should return undef" );
my $old_tz = $ENV{'TZ'};
foreach my $t ( @tests ) {
my ( $date, $tz, $epoch, $result ) = @$t;
@Timezone::tz_local = ();
$ENV{'TZ'} = $tz;
tzset();
my $r = Lire::SQLExt::LrTimegroup::lr_timegroup_day( $epoch );
my $result_fmt = strftime( '%Y-%m-%d %H:%M %Z', localtime $result );
my $r_fmt = strftime( '%Y-%m-%d %H:%M %Z', localtime $r );
$ENV{'TZ'} = $old_tz || '';
tzset();
$self->assert_equals( $result, $r,
"lr_timegroup_day( '$date' ) returned $r_fmt($r), expected $result_fmt($result)" );
}
}
sub test_lr_timegroup_week {
my $self = $_[0];
my @tests =
( [ '2003-01-01 00:15 CET', 'CET', 'ISO', 1, 1041376500, 1041202800 ],
[ '2003-01-01 00:15 CET', 'CET', 'ISO', 1, 1041376500.444, 1041202800],
[ '2003-01-01 00:15 CET', 'CET', 'ISO', 4, 1041376500, 1041202800 ],
[ '2002-12-31 23:15 CET', 'CET', 'ISO', 1, 1041372900, 1041202800 ],
[ '2003-10-14 12:00 UTC', 'UTC', 'ISO', 1, 1066125600, 1066003200 ],
[ '2003-10-14 12:00 UTC', 'UTC', 'ISO', 4, 1066125600, 1065398400 ],
[ '2003-01-22 00:00 EST', 'EST', 'ISO', 4, 1043211600, 1041224400 ],
[ '2003-01-29 00:00 EST', 'EST', 'ISO', 4, 1043816400, 1043643600 ],
[ '2003-02-19 00:00 EST', 'EST', 'ISO', 4, 1045630800, 1043643600 ],
# Weeks start on sunday
[ '2003-01-01 00:15 CET', 'CET', 'U', 1, 1041376500, 1041116400 ],
# Week 0 is grouped in Week 1
[ '2003-01-01 00:15 CET', 'CET', 'U', 4, 1041376500, 1041721200 ],
[ '2002-12-31 23:15 CET', 'CET', 'U', 1, 1041372900, 1041116400 ],
[ '2003-10-14 12:00 UTC', 'UTC', 'U', 1, 1066125600, 1065916800 ],
[ '2003-10-14 12:00 UTC', 'UTC', 'U', 4, 1066125600, 1065916800 ],
[ '2003-01-29 00:00 EST', 'EST', 'U', 4, 1043816400, 1041742800 ],
[ '2003-02-04 00:00 EST', 'EST', 'U', 4, 1044334800, 1044162000 ],
);
$self->assert_null( Lire::SQLExt::LrTimegroup::lr_timegroup_week( undef ),
"lr_timegroup_week( undef ) should return undef" );
my $old_tz = $ENV{'TZ'};
foreach my $t ( @tests ) {
my ( $date, $tz, $style, $mult, $epoch, $result ) = @$t;
$ENV{'TZ'} = $tz;
tzset();
$self->{'cfg'}{'lr_week_numbering'} = $style;
$Lire::SQLExt::LrTimegroup::calc = undef;
my $r = Lire::SQLExt::LrTimegroup::lr_timegroup_week( $epoch, $mult );
my $result_fmt = strftime( '%Y-%m-%d (%G-%V) %Z', localtime $result );
my $r_fmt = strftime( '%Y-%m-%d (%G-%V) %Z', localtime $r );
$ENV{'TZ'} = $old_tz || '';
tzset();
$self->assert_equals( $result, $r,
"lr_timegroup_week( '$date', $mult ) using $style returned $r_fmt($r), expected $result_fmt($result)" );
}
}
sub test_lr_timegroup_month {
my $self = $_[0];
my @tests =
( [ '2002-12-31 00:00 CET', 'CET', 1, 1041289200, 1038697200 ],
[ '2002-12-31 00:00 CET', 'CET', 3, 1041289200, 1033423200 ],
[ '2003-01-01 00:00 UTC', 'UTC', 1, 1041379200, 1041379200 ],
[ '2003-01-01 00:00 UTC', 'UTC', 1, 1041379200.346, 1041379200 ],
[ '2003-01-01 00:00 UTC', 'UTC', 3, 1041379200, 1041379200 ],
[ '2003-03-01 00:00 UTC', 'UTC', 3, 1046476800, 1041379200 ],
[ '2003-04-05 00:00 EST', 'EST', 1, 1049518800, 1049173200 ],
[ '2003-04-05 00:00 EST', 'EST', 3, 1049518800, 1049173200 ],
);
$self->assert_null( Lire::SQLExt::LrTimegroup::lr_timegroup_month( undef ),
"lr_timegroup_month( undef ) should return undef" );
my $old_tz = $ENV{'TZ'};
foreach my $t ( @tests ) {
my ( $date, $tz, $mult, $epoch, $result ) = @$t;
$ENV{'TZ'} = $tz;
tzset();
my $r = Lire::SQLExt::LrTimegroup::lr_timegroup_month( $epoch, $mult );
my $result_fmt = strftime( '%Y-%m-%d %Z', localtime $result );
my $r_fmt = strftime( '%Y-%m-%d %Z', localtime $r );
$ENV{'TZ'} = $old_tz || '';
tzset();
$self->assert_equals( $result, $r,
"lr_timegroup_month( '$date', $mult ) returned $r_fmt($r), expected $result_fmt($result)" );
}
}
sub test_lr_timegroup_year {
my $self = $_[0];
my @tests =
( [ '2002-12-31 00:00 CET', 'CET', 1, 1041289200, 1009839600 ],
[ '2002-12-31 00:00 CET', 'CET', 1, 1041289200.765, 1009839600 ],
[ '2000-01-01 00:00 UTC', 'UTC', 10, 946684800, 662688000 ],
[ '2001-01-01 00:00 UTC', 'UTC', 10, 978307200, 978307200 ],
);
$self->assert_null( Lire::SQLExt::LrTimegroup::lr_timegroup_year( undef ),
"lr_timegroup_year( undef ) should return undef" );
my $old_tz = $ENV{'TZ'};
foreach my $t ( @tests ) {
my ( $date, $tz, $mult, $epoch, $result ) = @$t;
$ENV{'TZ'} = $tz;
tzset();
my $r = Lire::SQLExt::LrTimegroup::lr_timegroup_year( $epoch, $mult );
my $result_fmt = strftime( '%Y-%m-%d %Z', localtime $result );
my $r_fmt = strftime( '%Y-%m-%d %Z', localtime $r );
$ENV{'TZ'} = $old_tz || '';
tzset();
$self->assert_equals( $result, $r,
"lr_timegroup_year( '$date', $mult ) returned $r_fmt($r), expected $result_fmt($result)" );
}
}
1;
syntax highlighted by Code2HTML, v. 0.9.1