#!perl -w
use Test::More;
use Schedule::Cron;
use Time::ParseDate;
my $time;
while (defined($_=<DATA>) && $_ !~ /end/i) {
chomp;
if (/^Reftime:\s*(.*)$/) {
$time = $1;
$time =~ s/\#.*$//;
$time = parsedate($time,UK=>1);
next;
}
s/^\s*(.*)\s*/$1/;
next if /^\#/ || /^$/;
my @args = split(/\s+/,$_,6);
my $date;
my $rest = pop @args;
my ($col6,$more_args) = split(/\s+/,$rest,2);
if ($col6 =~ /^[\d\-\*\,\/]+$/)
{
push @args,$col6;
$date = $more_args;
}
else
{
$date = $rest;
}
push @entries,[$time, \@args];
my $res_date = parsedate($date,UK=>1);
die "Internal error" unless $res_date;
push @results,$res_date;
}
my $cron = new Schedule::Cron(sub {});
plan tests => scalar(@entries);
my $i;
for ($i=0;$i<=$#entries;$i++)
{
my $t = $cron->get_next_execution_time($entries[$i]->[1],$entries[$i]->[0]);
print "# Cron-Entry: ",join(" ",@{$entries[$i]->[1]}),"\n";
print "# Ref-Time: ",scalar(localtime($entries[$i]->[0])),"\n";
print "# Calculated: ",scalar(localtime($t)),"\n";
print "# Expected: ",scalar(localtime($results[$i])),"\n";
ok($t == $results[$i]);
}
__DATA__
Reftime: Mon Dec 27 20:14:14 1999
# Minutes:
# ========
* * * * * 0 20:15 27/12/1999 Monday
20 * * * * 20:20 27/12/1999 Monday
10-50 * * * * 20:15 27/12/1999 Monday
13-30/4 * * * * 20:17 27/12/1999 Monday
10 * * * * 21:10 27/12/1999 Monday
18,20 * * * * 20:18 27/12/1999 Monday
# Hours:
# ======
* 21 * * * 21:00 27/12/1999 Monday
* 19 * * * 19:00 28/12/1999 Tuesday
* 10-23/5 * * * 20:15 27/12/1999 Monday
* 10-23/7 * * * 10:00 28/12/1999 Tuesday
# Days-of-Month:
# ==============
* * 29 2 * 00:00 29/02/2000 Tuesday
23 4 23-30/3 * * 04:23 29/12/1999 Wednesday
12 21 27 * * 21:12 27/12/1999 Monday
12 19 27 * * 19:12 27/01/2000 Thursday
* 18 21,15,8 * * 18:00 08/01/2000 Saturday
# Months:
# =======
* * * 11 * 00:00 01/11/2000 Wednesday
* * * 12 * 20:15 27/12/1999 Monday
* * * 0 * 00:00 01/01/2000 Saturday
42 0 4 Jan-Dec * 00:42 04/01/2000 Tuesday
42 21 4 Jan-Dec/2 * 21:42 04/01/2000 Tuesday
42 21 * Feb-Dec/2 * 21:42 27/12/1999 Monday
42 19 * Feb-Dec/2 * 19:42 28/12/1999 Tuesday
42 19 27 Feb-Dec/2 * 19:42 27/02/2000 Sunday
# Days-of-Week:
# =============
14 15 * Dec,Jan 0 15:14 02/01/2000 Sunday
14 15 * Dec,Jan 7 15:14 02/01/2000 Sunday
0 12 * * Mon-Fri 12:00 28/12/1999 Tuesday
* * * * Mon 20:15 27/12/1999 Monday
0 21 * * Mon 21:00 27/12/1999 Monday
0 19 * * Mon 19:00 03/01/2000 Monday
13 14 * * Sun-Sat/2 14:13 28/12/1999 Tuesday
# Seconds
* * * * * * 20:14:15 27/12/1999 Monday
* * * * * 5-10 20:15:05 27/12/1999 Monday
* * * * * 13-30/4 20:14:17 27/12/1999 Monday
* * * * * 18 20:14:18 27/12/1999 Monday
# Horrible combinations ;-):
# ==========================
0 21 27 * Wed 21:00 27/12/1999 Monday
0 19 27 * Wed 19:00 29/12/1999 Wednesday
0 19,21 27 * Wed 21:00 27/12/1999 Monday
20-30/5,17 19,21 27 * Wed 21:17 27/12/1999 Monday
# Check for parsedate-normalization
# (thanx to Lars Holokowo)
# =================================
1 3 30 6 * 03:01 30/06/2000 Monday
0 03 30 6 * 03:00 30/06/2000 Monday
00 3 30 6 * 03:00 30/06/2000 Monday
0 3 30 6 * 03:00 30/06/2000 Monday
# Bug reported by Loic Paillotin
# ==============================
5,10,25,30,35,40,45,50,55 * * * * 20:25 27/12/1999 Monday
5,10,25,30,35,40,45,50,55 * * * * 20:25 27/12/1999 Monday
*/5 * * * * 20:15 27/12/1999 Monday
end
syntax highlighted by Code2HTML, v. 0.9.1