File: 05byday.t

package info (click to toggle)
libdatetime-event-ical-perl 0.13-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 220 kB
  • sloc: perl: 1,767; makefile: 2
file content (170 lines) | stat: -rw-r--r-- 5,389 bytes parent folder | download | duplicates (4)
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" );
}