The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/bin/perl -w

use strict;

use Test::More tests => 6;

use DateTime;
use DateTime::Event::ICal;

{
    my $dt1 = new DateTime( year => 2003, month => 4, day => 28,
                           hour => 12, minute => 10, second => 45,
                           nanosecond => 123456,
                           time_zone => 'UTC' );

    my $dt2 = new DateTime( year => 2003, month => 5, day => 01,
                           hour => 12, minute => 10, second => 45,
                           nanosecond => 123456,
                           time_zone => 'UTC' );

    my ( $set, @dt, $r );

    # DAILY
    $set = DateTime::Event::ICal->recur( freq => 'daily' );
    @dt = $set->as_list( start => $dt1, end => $dt2 );
    $r = join(' ', map { $_->datetime } @dt);
    is( $r, 
        '2003-04-29T00:00:00 2003-04-30T00:00:00 2003-05-01T00:00:00',
        "daily without args" );

    # SECONDLY
    $set = DateTime::Event::ICal->recur( freq => 'secondly' );
    @dt = $set->as_list( start => $dt1, 
                         end => $dt1->clone->add( seconds => 2 ) );
    $r = join(' ', map { $_->datetime } @dt);
    is( $r,
        '2003-04-28T12:10:46 2003-04-28T12:10:47',
        "secondly" );

    # MINUTELY
    $set = DateTime::Event::ICal->recur( 
       freq => 'minutely',
       dtstart => $dt1 );
    @dt = $set->as_list( start => $dt1,
                         end => $dt1->clone->add( minutes => 2 ) );
    $r = join(' ', map { $_->datetime } @dt);
    is( $r,
        '2003-04-28T12:11:45 2003-04-28T12:12:45',
        "minutely and dtstart" );

    # HOURLY
    $set = DateTime::Event::ICal->recur(
       freq => 'hourly',
       dtstart => $dt1,
       bysecond => [ 1, 3 ] );
    @dt = $set->as_list( start => $dt1,
                         end => $dt1->clone->add( hours => 2 ) );
    $r = join(' ', map { $_->datetime } @dt);
    is( $r,
        '2003-04-28T13:10:01 2003-04-28T13:10:03 '.
        '2003-04-28T14:10:01 2003-04-28T14:10:03',
        "hourly, dtstart, bysecond" );

    # MONTHLY 
    $set = DateTime::Event::ICal->recur(
       freq => 'monthly',
       dtstart => $dt1,
    );
    @dt = $set->as_list( start => $dt1,
                         end => $dt1->clone->add( months => 2 ) );
    $r = join(' ', map { $_->datetime } @dt);
    is( $r,
        '2003-05-28T12:10:45 2003-06-28T12:10:45',
        "monthly, dtstart" );

    # MONTHLY BYMONTHDAY
    $set = DateTime::Event::ICal->recur(
       freq => 'monthly',
       dtstart => $dt1,
       bymonthday => [ 1, 3 ] );
    @dt = $set->as_list( start => $dt1,
                         end => $dt1->clone->add( months => 2 ) );
    $r = join(' ', map { $_->datetime } @dt);
    is( $r,
        '2003-05-01T12:10:45 2003-05-03T12:10:45 '.
        '2003-06-01T12:10:45 2003-06-03T12:10:45',
        "monthly, dtstart, bymonthday" );
}