Blame t/04_legacy_year.t

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::Format::ISO8601;
Packit 106d3f
Packit 106d3f
{
Packit 106d3f
    is( DateTime::Format::ISO8601->DefaultLegacyYear, 1 );
Packit 106d3f
    my $iso_parser = DateTime::Format::ISO8601->new;
Packit 106d3f
    is( $iso_parser->legacy_year, 1 );
Packit 106d3f
}
Packit 106d3f
Packit 106d3f
foreach my $n ( 0, 1, undef ) {
Packit 106d3f
    DateTime::Format::ISO8601->DefaultLegacyYear( $n );
Packit 106d3f
    is( DateTime::Format::ISO8601->DefaultLegacyYear, $n );
Packit 106d3f
    my $iso_parser = DateTime::Format::ISO8601->new;
Packit 106d3f
    is( $iso_parser->legacy_year, $n );
Packit 106d3f
}
Packit 106d3f
Packit 106d3f
foreach my $n ( -3 .. -1, 2 .. 4 ) {
Packit 106d3f
    eval { DateTime::Format::ISO8601->DefaultLegacyYear( $n ) };
Packit 106d3f
    like( $@, qr/did not pass the 'is 0, 1, or undef' callback/ );
Packit 106d3f
}
Packit 106d3f
Packit 106d3f
# restore default legacy year behavior
Packit 106d3f
DateTime::Format::ISO8601->DefaultLegacyYear( 1 );
Packit 106d3f
Packit 106d3f
foreach my $n ( 0, 1, undef ) {
Packit 106d3f
    my $iso_parser = DateTime::Format::ISO8601->new( legacy_year => $n );
Packit 106d3f
    isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
Packit 106d3f
    is( $iso_parser->legacy_year, $n );
Packit 106d3f
Packit 106d3f
    {
Packit 106d3f
        my $iso_parser = DateTime::Format::ISO8601->new->set_legacy_year( $n );
Packit 106d3f
        is( $iso_parser->legacy_year, $n );
Packit 106d3f
    }
Packit 106d3f
}
Packit 106d3f
Packit 106d3f
foreach my $n ( -3 .. -1, 2 .. 4 ) {
Packit 106d3f
    eval { DateTime::Format::ISO8601->new( legacy_year => $n ) };
Packit 106d3f
    like( $@, qr/did not pass the 'is 0, 1, or undef' callback/ );
Packit 106d3f
Packit 106d3f
    eval { DateTime::Format::ISO8601->new->set_legacy_year( $n ) };
Packit 106d3f
    like( $@, qr/did not pass the 'is 0, 1, or undef' callback/ );
Packit 106d3f
}
Packit 106d3f
Packit 106d3f
{
Packit 106d3f
    my $failed = 0;
Packit 106d3f
Packit 106d3f
    foreach my $year ( 0 .. 99 ) {
Packit 106d3f
        $year *= 100; # [0, 9900], step 100
Packit 106d3f
        my $iso_parser = DateTime::Format::ISO8601->new(
Packit 106d3f
            legacy_year     => 0,
Packit 106d3f
            base_datetime   => DateTime->new( year => $year ),
Packit 106d3f
        );
Packit 106d3f
Packit 106d3f
        foreach my $tdy ( 0 .. 9 ) {
Packit 106d3f
            $tdy *= 10; # [0, 90], step 10
Packit 106d3f
            $tdy = sprintf( "%02d", $tdy );
Packit 106d3f
            my $dt = $iso_parser->parse_datetime( "-$tdy" );
Packit 106d3f
            $failed++ unless $dt->year eq sprintf(
Packit 106d3f
                "%d", $iso_parser->base_datetime->strftime( "%C" ) . $tdy );
Packit 106d3f
        }
Packit 106d3f
    }
Packit 106d3f
Packit 106d3f
    is( $failed, 0, "parse_datetime() with a base_datetime" );
Packit 106d3f
}