#!/usr/bin/perl
# Copyright (C) 2005 Joshua Hoblitt
use strict;
use warnings;
use lib qw( ./lib );
use Test::More tests => 36;
use DateTime;
use DateTime::Format::ISO8601;
my @good_bases = (
{ year => 0 },
{ year => 1 },
{ year => 2500 },
{ year => 5000 },
{ year => 7500 },
{ year => 9998 },
{
year => 9999,
month => 12,
day => 12,
hour => 23,
minute => 59,
second => 59,
nanosecond => 999_999_999,
},
);
my @test_bases = (
[ "1945-09-02T09:04", '1945-W35' ],
[ "1987-12-18T02:03", '1987-W51' ],
[ "1988-05-05T04:05", '1988-W18' ],
[ "1989-10-18T06:07", '1989-W42' ],
[ "1991-03-21T08:09", '1991-W12' ],
);
my @bad_bases = (
{ year => -2 },
{ year => -1 },
{
year => -1,
month => 12,
day => 31,
hour => 23,
minute => 59,
second => 59,
nanosecond => 999_999_999
},
{ year => 10_000 },
{ year => 10_001 },
{ year => 10_002 },
);
foreach my $params ( @good_bases ) {
my $dt = DateTime->new( %$params );
{
my $iso_parser = DateTime::Format::ISO8601->new(
base_datetime => $dt,
);
isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
}
{
my $iso_parser = DateTime::Format::ISO8601->new->set_base_datetime(
object => $dt,
);
isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
}
}
foreach ( @test_bases ) {
my $iso_parser = DateTime::Format::ISO8601->new(
base_datetime => DateTime::Format::ISO8601->parse_datetime( $_->[0] ),
);
{
#tests...
#_add_minute
#_add_hour
#_add_day
#_add_month
#_add_year
#--ss,s --50,5
my $dt = $iso_parser->parse_datetime( '--50,5' );
is( $dt->strftime( "%Y-%m-%dT%H:%M" ), $_->[0] );
}
{
#tests...
#_add_week
#_add_year
#-W-D -W-5
my $dt = $iso_parser->parse_datetime( '-W-5' );
is( $dt->strftime( "%Y-W%V" ), $_->[1] );
}
}
foreach my $params ( @bad_bases ) {
my $dt = DateTime->new( %$params );
eval {
DateTime::Format::ISO8601->new(
base_datetime => $dt,
);
};
like( $@, qr/base_datetime must be (greater|less) then/ );
eval {
DateTime::Format::ISO8601->new->set_base_datetime(
object => $dt,
);
};
like( $@, qr/base_datetime must be (greater|less) then/ );
}