03_base_datetime.t [plain text]
use strict;
use Test::More tests => 7010;
use DateTime;
use DateTime::Format::ISO8601;
my @good_bases = qw(
0000-01-01T00:00:00
0001-01-01T00:00:00
2500-03-03T06:15:15
5000-05-05T12:30:30
7500-09-09T18:45:45
9998-12-12T23:59:59
9999-12-12T23:59:59
);
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' ],
);
foreach ( 0 .. 99 ) {
#tests...
#new
#base_datetime
#set_base_datetime
my $base = $_ * 100;
foreach ( 0 .. 9 ) {
$_ *= 10;
$_ += $base;
my $dt = DateTime->new(
year => $_,
month => $_ % 12 || 1,
day => $_ % 28 || 1,
hour => $_ % 23,
minute => $_ % 59,
second => $_ % 59,
);
my $iso_parser = DateTime::Format::ISO8601->new(
base_datetime => $dt,
);
isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
is( $iso_parser->base_datetime->iso8601, $dt->iso8601 );
$iso_parser->set_base_datetime(
object => $dt,
);
is( $iso_parser->base_datetime->iso8601, $dt->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 ( -99 .. -1, 100 .. 200 ) {
my $base = $_ * 100;
foreach ( 0 .. 9 ) {
$_ *= 10;
$_ += $base;
my $dt = DateTime->new(
year => $_,
month => $_ % 12 || 1,
day => $_ % 28 || 1,
hour => $_ % 23,
minute => $_ % 59,
second => $_ % 59,
);
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/ );
}
}