XML-RSS-Timing
view release on metacpan or search on metacpan
t/040_next_skippy.t view on Meta::CPAN
require 5;
use strict;
use Test;
BEGIN { plan tests => 26 }
#sub XML::RSS::Timing::DEBUG () {10}
use XML::RSS::Timing;
print "# I'm testing XML::RSS::Timing version $XML::RSS::Timing::VERSION\n";
ok 1;
print "# Required OK.\n";
use Time::Local;
my $E1970 = timegm(0,0,0,1,0,70);
ok 1;
print "# E1970 = $E1970 s (", scalar(gmtime($E1970)), ")\n";
my $now;
my @skipHours;
my @skipDays;
sub skipHours { @skipHours = @_; print "# skipHours: @skipHours\n" };
sub skipDays { @skipDays = @_; print "# skipDays: @skipDays\n" };
sub setnow {
$now = XML::RSS::Timing->_iso_date_to_epoch($_[0]);
print "# Setting now to $now = $_[0] = ", scalar(gmtime($now)), "\n";
}
sub n ($$) {
my $x = XML::RSS::Timing->new;
$x->lastPolled($now);
my($temp, $next) = @_;
my($base, $period, $freq) = ($temp =~ m/(\S+)/sg) ;
$x->use_exceptions(0);
#print "base{$base} per{$period} freq{$freq}\n";
$x->updateBase($base);
$x->updatePeriod($period);
$x->updateFrequency($freq) if $freq;
$x->skipHours(@skipHours);
$x->skipDays( @skipDays );
my $out = $x->nextUpdate;
$out = join '', "ERR(", $x->complaints, ")" unless defined $out;
$next = $x->_iso_date_to_epoch($next) if $next =~ m/:/s;
return $out, $next, "from $temp given now=$now";
}
# To note: 1970-01-01 was a Thursday
#
# January 1970
# S M Tu W Th F S
# 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
#
# First with some irrelevent constraints
skipHours( 2 );
skipDays(qw( Tuesday ));
setnow('1970-01-01T00:00');
&ok(n '1970-01-01T00:00 hourly', '1970-01-01T01:00');
&ok(n '1970-01-01T00:00 daily', '1970-01-02T00:00');
&ok(n '1970-01-01T00:00 weekly', '1970-01-08T00:00');
&ok(n '1970-01-01T00:00 hourly 2', '1970-01-01T00:30');
&ok(n '1970-01-01T00:00 daily 2', '1970-01-01T12:00');
&ok(n '1970-01-01T00:00 weekly 2', '1970-01-04T12:00');
# Now with a relevent hour constraint
skipHours( 1, 12, 13, 14 );
skipDays(qw( Tuesday ));
&ok(n '1970-01-01T00:00 hourly', '1970-01-01T02:00');
&ok(n '1970-01-01T00:00 daily', '1970-01-02T00:00');
&ok(n '1970-01-01T00:00 weekly', '1970-01-08T00:00');
&ok(n '1970-01-01T00:13 hourly', '1970-01-01T02:00');
&ok(n '1970-01-01T00:13 daily', '1970-01-02T00:00');
&ok(n '1970-01-01T00:13 weekly', '1970-01-08T00:00');
&ok(n '1970-01-01T00:00 hourly 2', '1970-01-01T00:30');
&ok(n '1970-01-01T00:00 daily 2', '1970-01-01T15:00');
&ok(n '1970-01-01T00:00 weekly 2', '1970-01-04T15:00');
# Now with a relevent day constraint
( run in 1.043 second using v1.01-cache-2.11-cpan-e1769b4cff6 )