#!/bin/perl -w use strict; use Test::More tests => 7; use DateTime; use DateTime::Event::ICal; { my $dt1 = new DateTime( year => 2003, month => 4, day => 28, hour => 12, minute => 10, second => 45, time_zone => 'UTC' ); # $dt1 is monday, week 18 my ( $set, @dt, $r ); # DAILY BYMONTH $set = DateTime::Event::ICal->recur( freq => 'daily', dtstart => $dt1, bymonth => [ 2, 12 ], interval => 10 ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( years => 1 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2003-12-04T12:10:45 2003-12-14T12:10:45 2003-12-24T12:10:45 '. '2004-02-02T12:10:45 2004-02-12T12:10:45 2004-02-22T12:10:45', "daily, dtstart, interval, bymonth" ); # YEARLY BYMONTH BYMONTHDAY $set = DateTime::Event::ICal->recur( freq => 'yearly', dtstart => $dt1, bymonth => [ 2, 12 ], bymonthday => [ 3, 13 ] ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( years => 1 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2003-12-03T12:10:45 2003-12-13T12:10:45 '. '2004-02-03T12:10:45 2004-02-13T12:10:45', "yearly, dtstart, bymonthday, bymonth" ); # YEARLY BYWEEKNO $set = DateTime::Event::ICal->recur( freq => 'yearly', dtstart => $dt1, byweekno => [ 2, 12 ], ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( years => 1 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2004-01-05T12:10:45 2004-03-15T12:10:45', "yearly, dtstart, byweekno" ); # CHANGE DTSTART WEEKDAY $set = DateTime::Event::ICal->recur( freq => 'yearly', dtstart => $dt1->clone->add( days => 1 ), byweekno => [ 2, 12 ], ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( years => 1 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2004-01-06T12:10:45 2004-03-16T12:10:45', "yearly, dtstart, byweekno" ); # YEARLY BYDAY=1FR $set = DateTime::Event::ICal->recur( freq => 'yearly', dtstart => $dt1, byday => [ '1fr', '2fr', '-1tu' ], ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( years => 1 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2003-12-30T12:10:45 2004-01-02T12:10:45 2004-01-09T12:10:45', "yearly, dtstart, byday=1fr,2fr,-1tu" ); # YEARLY BYDAY=1FR HOUR $set = DateTime::Event::ICal->recur( freq => 'yearly', dtstart => $dt1, byday => [ '1fr', '2fr', '-1tu' ], byhour => [ 10, 14 ], ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( years => 1 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2003-12-30T10:10:45 2003-12-30T14:10:45 '. '2004-01-02T10:10:45 2004-01-02T14:10:45 '. '2004-01-09T10:10:45 2004-01-09T14:10:45', "yearly, dtstart, byday=1fr,2fr,-1tu, byhour" ); # MONTHLY BYSETPOS $set = DateTime::Event::ICal->recur( freq => 'monthly', dtstart => $dt1, bymonthday => [ -1, -2, -3, -4, -5, -6 ], bysetpos => [ 3, -2 ], ); @dt = $set->as_list( start => $dt1, end => $dt1->clone->add( months => 3 ) ); $r = join(' ', map { $_->datetime } @dt); is( $r, '2003-04-29T12:10:45 '. '2003-05-28T12:10:45 '. '2003-05-30T12:10:45 2003-06-27T12:10:45 2003-06-29T12:10:45 '. '2003-07-28T12:10:45', "monthly, bymonthday, bysetpos" ); }