DateTime-Set

 view release on metacpan or  search on metacpan

t/20spanset_week_wrapped_recurrence.t  view on Meta::CPAN

#!/usr/bin/env perl

use strict;
use warnings;

use Test::More;

use DateTime;
use DateTime::SpanSet;


# Check that SpanSets return Spans with the correct endpoints given
# the same week recurrence as its starting and ending sets.

BEGIN {
    if (eval 'use DateTime::Event::Recurrence; 1') {
        plan tests => 60;
    }
    else {
        plan skip_all => 'DateTime::Event::Recurrence required for this test.';
    }
}


my $recurrence =
    DateTime::Event::Recurrence->weekly(
        days => 1, hours => 8, minutes => 30,
    );

my $base_span_set =
    DateTime::SpanSet
        ->from_sets(start_set => $recurrence, end_set => $recurrence);

my $test_time_zone = 'Australia/Adelaide';

test_end_points(
    $base_span_set,
    'no time zone changes',
    undef,
);
test_end_points(
    $base_span_set
        ->clone()
        ->set_time_zone($test_time_zone),
    'time zone specified',
    $test_time_zone,
);
test_end_points(
    $base_span_set
        ->clone()
        ->set_time_zone('floating')
        ->set_time_zone($test_time_zone),
    'intermediary floating time zone',
    $test_time_zone,
);

sub test_end_points {
    my ($span_set, $name, $time_zone) = @_;

    foreach my $hour (6..7) {
        test_end_points_for_hour($span_set, $name, $time_zone, $hour, 8);
    }
    foreach my $hour (8..10) {
        test_end_points_for_hour($span_set, $name, $time_zone, $hour, 15);
    }

    return;
}


sub test_end_points_for_hour {
    my ($span_set, $name, $time_zone, $hour, $expected_start_day_of_month) = @_;



( run in 0.683 second using v1.01-cache-2.11-cpan-9789f410c06 )