App-JobLog
view release on metacpan or search on metacpan
t/TimeGrammar.t view on Meta::CPAN
#!/usr/bin/perl
# tests App::JobLog::TimeGrammar
use Modern::Perl;
use App::JobLog::Config qw(
DIRECTORY
log
pay_period_length
start_pay_period
);
use App::JobLog::Time qw(tz);
use App::JobLog::TimeGrammar;
use DateTime;
use File::Temp;
use Test::More;
use Test::Fatal;
# create working directory
my $dir = File::Temp->newdir();
$ENV{ DIRECTORY() } = $dir;
# fix current moment
my $now = DateTime->new( year => 2011, month => 2, day => 18, time_zone => tz );
$App::JobLog::Time::now = $now;
subtest 'regressions' => sub {
my %dates = (
'jan 1 - 10' => [ [qw(2011 1 1 0 0 0)], [qw(2011 1 10 23 59 59)] ],
'jan 1' => [ [qw(2011 1 1 0 0 0)], [qw(2011 1 1 23 59 59)] ],
'december 2010' => [ [qw(2010 12 1 0 0 0)], [qw(2010 12 31 23 59 59)] ],
'2010.12' => [ [qw(2010 12 1 0 0 0)], [qw(2010 12 31 23 59 59)] ],
'2011' => [ [qw(2011 1 1 0 0 0)], [qw(2011 12 31 23 59 59)] ],
'jan 1 - 28' => [ [qw(2011 1 1 0 0 0)], [qw(2011 1 28 23 59 59)] ],
);
plan tests => 2 * keys %dates;
for my $date ( sort keys %dates ) {
my ( $s, $e ) = parse($date);
my ( $st, $et ) = @{ $dates{$date} };
ok( time_test( $s, $st ), "correct start time for '$date'" );
ok( time_test( $e, $et ), "correct end time for '$date'" );
}
};
subtest 'single dates with times' => sub {
my %dates = (
'Thursday' => [ [ 8, 30 ], [ 2011, 2, 17 ] ],
'last Friday' => [ [ 8, 30 ], [ 2011, 2, 11 ] ],
'2/1' => [ [ 8, 30 ], [ 2011, 2, 1 ] ],
'2010/2/1' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
'2010.2.1' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
'2/1/2010' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
'2.1.2010' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
'Feb 1, 2010' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
'1 Feb, 2010' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
'1 Feb 2010' => [ [ 8, 30 ], [ 2010, 2, 1 ] ],
);
my @variants;
while ( my ( $expression, $times ) = each %dates ) {
my @time = @{ $times->[0] };
push @variants, [ $_, [ @{ $times->[1] }, @{ $times->[0] } ] ]
for time_variants( $expression, @time );
}
plan tests => 3 * @variants;
for my $variant (@variants) {
my $expression = $variant->[0];
my ( $s, $e, $is_interval ) = parse($expression);
ok( time_test( $s, $variant->[1] ), "right time for '$expression' " );
ok( !$is_interval, " determined '$expression' is not an interval " );
ok(
$e->hour == 23 && $e->minute == 59 && $e->second == 59,
"inferred end time for '$expression' correctly "
);
}
};
subtest 'intervals' => sub {
( run in 0.912 second using v1.01-cache-2.11-cpan-54e63673c56 )