1#!/usr/bin/perl -w
2use strict;
3use lib './lib';
4use Test::More tests => 21;
5
6use DateTime;
7use DateTime::Event::Cron;
8
9sub make_datetime {
10  @_ == 6 or die "Invalid argument count\n";
11  DateTime->new(
12    year => $_[0], month  => $_[1], day    => $_[2],
13    hour => $_[3], minute => $_[4], second => $_[5],
14  );
15}
16
17sub dcomp { is(shift->datetime, shift->datetime, shift) }
18
19my($date, $new, $dts, $desc);
20
21$desc = 'cascade minute to hour';
22$dts = DateTime::Event::Cron->from_cron(cron => '30 10,14,18 * * *');
23ok($dts, "$desc create");
24$date = make_datetime(2003,1,1,14,40,0);
25$new = $dts->next($date);
26$date = make_datetime(2003,1,1,18,30,0);
27dcomp($new, $date, "$desc next");
28$date = make_datetime(2003,1,1,14,20,0);
29$new = $dts->previous($date);
30$date = make_datetime(2003,1,1,10,30,0);
31dcomp($new, $date, "$desc prev");
32
33$desc = "cascade hour to day";
34$dts = DateTime::Event::Cron->from_cron(cron => '0 12 10,15,20 * *');
35ok($dts, "$desc create");
36$date = make_datetime(2003,1,15,15,0,0);
37$new = $dts->next($date);
38$date = make_datetime(2003,1,20,12,0,0);
39dcomp($new, $date, "$desc next");
40$date = make_datetime(2003,1,15,10,0,0);
41$new = $dts->previous($date);
42$date = make_datetime(2003,1,10,12,0,0);
43dcomp($new, $date, "$desc prev");
44
45$desc = "cascade hour to dow";
46$dts = DateTime::Event::Cron->from_cron(cron => '0 12 * * 2,4,6');
47ok($dts, "$desc create");
48$date = make_datetime(2003,1,16,15,0,0);
49$new = $dts->next($date);
50$date = make_datetime(2003,1,18,12,0,0);
51dcomp($new, $date, "$desc next");
52$date = make_datetime(2003,1,16,10,0,0);
53$new = $dts->previous($date);
54$date = make_datetime(2003,1,14,12,0,0);
55dcomp($new, $date, "$desc prev");
56
57$desc = "cascade day to month";
58$dts = DateTime::Event::Cron->from_cron(cron => '0 0 15 5,7,9 *');
59ok($dts, "$desc create");
60$date = make_datetime(2003,7,20,0,0,0);
61$new = $dts->next($date);
62$date = make_datetime(2003,9,15,0,0,0);
63dcomp($new, $date, "$desc next");
64$date = make_datetime(2003,7,10,0,0,0);
65$new = $dts->previous($date);
66$date = make_datetime(2003,5,15,0,0,0);
67dcomp($new, $date, "$desc prev");
68
69$desc = "cascade dow to month";
70$dts = DateTime::Event::Cron->from_cron(cron => '0 0 * 5,7,9 3');
71ok($dts, "$desc create");
72$date = make_datetime(2003,7,31,0,0,0);
73$new = $dts->next($date);
74$date = make_datetime(2003,9,3,0,0,0);
75dcomp($new, $date, "$desc next");
76$date = make_datetime(2003,7,1,0,0,0);
77$new = $dts->previous($date);
78$date = make_datetime(2003,5,28,0,0,0);
79dcomp($new, $date, "$desc prev");
80
81$desc = "cascade month to year";
82$dts = DateTime::Event::Cron->from_cron(cron => '0 0 1 7 *');
83ok($dts, "$desc create");
84$date = make_datetime(2003,8,30,0,0,0);
85$new = $dts->next($date);
86$date = make_datetime(2004,7,1,0,0,0);
87dcomp($new, $date, "$desc next");
88$date = make_datetime(2003,6,30,0,0,0);
89$new = $dts->previous($date);
90$date = make_datetime(2002,7,1,0,0,0);
91dcomp($new, $date, "$desc prev");
92
93$desc = "cascade ripple minute to year";
94$dts = DateTime::Event::Cron->from_cron(cron => '20 10,14,18 5,10,15 5,7,9 *');
95ok($dts, "$desc create");
96$date = make_datetime(2003,9,15,18,30,0);
97$new = $dts->next($date);
98$date = make_datetime(2004,5,5,10,20,0);
99dcomp($new, $date, "$desc next");
100$date = make_datetime(2003,5,5,10,10,0);
101$new = $dts->previous($date);
102$date = make_datetime(2002,9,15,18,20,0);
103dcomp($new, $date, "$desc prev");
104
105# End test
106