Blob Blame History Raw
#!/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" ); 


}