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