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