1#!/usr/bin/perl -w
2use strict;
3use lib './lib';
4use Test::More tests => 12;
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    time_zone => "America/New_York",
15  );
16}
17
18sub dcomp { is(shift->datetime, shift->datetime, shift) }
19
20my($desc, $dtc, $old, $new, $date);
21
22$desc = "DST minute increment";
23$dtc = DateTime::Event::Cron->new_from_cron("*/5 * * * *");
24ok($dtc, "$desc create");
25$old = make_datetime(2017, 3, 12, 1, 55, 0);
26$new = $dtc->next($old);
27$date = make_datetime(2017, 3, 12, 3, 0, 0);
28dcomp($new, $date, "$desc next");
29
30$desc = "DST minute decrement";
31$dtc = DateTime::Event::Cron->new_from_cron("*/5 * * * *");
32ok($dtc, "$desc create");
33$old = make_datetime(2017, 3, 12, 3, 0, 0);
34$new = $dtc->previous($old);
35$date = make_datetime(2017, 3, 12, 1, 55, 0);
36dcomp($new, $date, "$desc next");
37
38$desc = "DST hour increment";
39$dtc = DateTime::Event::Cron->new_from_cron("30 * * * *");
40ok($dtc, "$desc create");
41$old = make_datetime(2017, 3, 12, 1, 30, 0);
42$new = $dtc->next($old);
43$date = make_datetime(2017, 3, 12, 3, 30, 0);
44dcomp($new, $date, "$desc next");
45
46$desc = "DST hour decrement";
47$dtc = DateTime::Event::Cron->new_from_cron("30 * * * *");
48ok($dtc, "$desc create");
49$old = make_datetime(2017, 3, 12, 3, 30, 0);
50$new = $dtc->previous($old);
51$date = make_datetime(2017, 3, 12, 1, 30, 0);
52dcomp($new, $date, "$desc next");
53
54$desc = "DST day increment";
55$dtc = DateTime::Event::Cron->new_from_cron("30 2 * * *");
56ok($dtc, "$desc create");
57$old = make_datetime(2017, 3, 11, 2, 30, 0);
58$new = $dtc->next($old);
59$date = make_datetime(2017, 3, 13, 2, 30, 0);
60dcomp($new, $date, "$desc next");
61
62$desc = "DST day decrement";
63$dtc = DateTime::Event::Cron->new_from_cron("*/5 * * * *");
64ok($dtc, "$desc create");
65$old = make_datetime(2017, 3, 12, 3, 0, 0);
66$new = $dtc->previous($old);
67$date = make_datetime(2017, 3, 12, 1, 55, 0);
68dcomp($new, $date, "$desc next");
69
70# End test
71