1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
#!/bin/perl -w
use strict;
use Test::More tests => 11;
use DateTime;
use DateTime::Event::ICal;
# yearly
{
my $dt1 = new DateTime( year => 2000 );
my ( $set, @dt, $r );
# test contributed by John Bishop
$set = DateTime::Event::ICal->recur(
freq => 'yearly',
dtstart => $dt1,
dtend => $dt1->clone->add( years => 3 ),
bymonth => 7,
byday => '3mo' );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-07-17T00:00:00 2001-07-16T00:00:00 2002-07-15T00:00:00',
"yearly, bymonth, byday" );
$set = DateTime::Event::ICal->recur(
freq => 'yearly',
dtstart => $dt1,
dtend => $dt1->clone->add( years => 3 ),
bymonth => 7,
byday => '3mo',
byhour => 10 );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-07-17T10:00:00 2001-07-16T10:00:00 2002-07-15T10:00:00',
"yearly, bymonth, byday, byhour" );
$set = DateTime::Event::ICal->recur(
freq => 'yearly',
dtstart => $dt1,
dtend => $dt1->clone->add( years => 1 ),
bymonth => 7,
byday => ['3mo', 'fr' ],
byhour => 10 );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-07-07T10:00:00 2000-07-14T10:00:00 2000-07-17T10:00:00 2000-07-21T10:00:00 2000-07-28T10:00:00',
"yearly, bymonth, byday index+nonindex, byhour" );
$set = DateTime::Event::ICal->recur(
freq => 'yearly',
dtstart => $dt1,
dtend => $dt1->clone->add( years => 3 ),
interval => 2,
bymonth => 7,
byday => ['3mo', 'fr' ],
byhour => 10 );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-07-07T10:00:00 2000-07-14T10:00:00 2000-07-17T10:00:00 2000-07-21T10:00:00 2000-07-28T10:00:00 '.
'2002-07-05T10:00:00 2002-07-12T10:00:00 2002-07-15T10:00:00 2002-07-19T10:00:00 2002-07-26T10:00:00',
"yearly, interval, bymonth, byday index+nonindex, byhour" );
# all months
$set = DateTime::Event::ICal->recur(
freq => 'yearly',
dtstart => $dt1,
dtend => $dt1->clone->add( years => 3 ),
interval => 2,
byday => ['3mo', 'fr' ],
byhour => 10 );
@dt = $set->as_list( start => $dt1,
end => $dt1->clone->add( months => 1 ) );
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-01-07T10:00:00 2000-01-14T10:00:00 2000-01-17T10:00:00 2000-01-21T10:00:00 2000-01-28T10:00:00',
"(2000) yearly, interval, byday index+nonindex, byhour" );
@dt = $set->as_list( start => $dt1->clone->add( months => 12 ),
end => $dt1->clone->add( months => 13 ) );
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'',
"(2001 = empty) yearly, interval, byday index+nonindex, byhour" );
@dt = $set->as_list( start => $dt1->clone->add( months => 24 ),
end => $dt1->clone->add( months => 25 ) );
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2002-01-04T10:00:00 2002-01-11T10:00:00 2002-01-18T10:00:00 2002-01-21T10:00:00 2002-01-25T10:00:00',
"(2002) yearly, interval, byday index+nonindex, byhour" );
}
# monthly
{
my $dt1 = new DateTime( year => 2000 );
my ( $set, @dt, $r );
$set = DateTime::Event::ICal->recur(
freq => 'monthly',
dtstart => $dt1,
dtend => $dt1->clone->add( months => 4 ),
byday => '3mo' );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-01-17T00:00:00 2000-02-21T00:00:00 2000-03-20T00:00:00 2000-04-17T00:00:00',
"monthly, byday" );
$set = DateTime::Event::ICal->recur(
freq => 'monthly',
dtstart => $dt1,
dtend => $dt1->clone->add( months => 4 ),
byday => '3mo',
byhour => 10 );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-01-17T10:00:00 2000-02-21T10:00:00 2000-03-20T10:00:00 2000-04-17T10:00:00',
"monthly, byday, byhour" );
$set = DateTime::Event::ICal->recur(
freq => 'monthly',
dtstart => $dt1,
dtend => $dt1->clone->add( months => 2 ),
byday => ['3mo', 'fr' ],
byhour => 10 );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-01-07T10:00:00 2000-01-14T10:00:00 2000-01-17T10:00:00 '.
'2000-01-21T10:00:00 2000-01-28T10:00:00 2000-02-04T10:00:00 '.
'2000-02-11T10:00:00 2000-02-18T10:00:00 2000-02-21T10:00:00 '.
'2000-02-25T10:00:00',
"monthly, byday index+nonindex, byhour" );
$set = DateTime::Event::ICal->recur(
freq => 'monthly',
dtstart => $dt1,
dtend => $dt1->clone->add( months => 3 ),
interval => 2,
byday => ['3mo', 'fr' ],
byhour => 10 );
@dt = $set->as_list;
$r = join(' ', map { $_->datetime } @dt);
is( $r,
'2000-01-07T10:00:00 2000-01-14T10:00:00 2000-01-17T10:00:00 '.
'2000-01-21T10:00:00 2000-01-28T10:00:00 '.
'2000-03-03T10:00:00 '.
'2000-03-10T10:00:00 2000-03-17T10:00:00 2000-03-20T10:00:00 '.
'2000-03-24T10:00:00 2000-03-31T10:00:00',
"monthly, byday index+nonindex, byhour" );
}
|