1#!/usr/bin/perl
2
3# Copyright (C) 2005  Joshua Hoblitt
4#
5# $Id: 04_legacy_year.t,v 1.3 2007/04/11 01:11:42 jhoblitt Exp $
6
7use strict;
8use warnings;
9
10use lib qw( ./lib );
11
12use Test::More tests => 36;
13
14use DateTime::Format::ISO8601;
15
16{
17    is( DateTime::Format::ISO8601->DefaultLegacyYear, 1 );
18    my $iso_parser = DateTime::Format::ISO8601->new;
19    is( $iso_parser->legacy_year, 1 );
20}
21
22foreach my $n ( 0, 1, undef ) {
23    DateTime::Format::ISO8601->DefaultLegacyYear( $n );
24    is( DateTime::Format::ISO8601->DefaultLegacyYear, $n );
25    my $iso_parser = DateTime::Format::ISO8601->new;
26    is( $iso_parser->legacy_year, $n );
27}
28
29foreach my $n ( -3 .. -1, 2 .. 4 ) {
30    eval { DateTime::Format::ISO8601->DefaultLegacyYear( $n ) };
31    like( $@, qr/did not pass the 'is 0, 1, or undef' callback/ );
32}
33
34# restore default legacy year behavior
35DateTime::Format::ISO8601->DefaultLegacyYear( 1 );
36
37foreach my $n ( 0, 1, undef ) {
38    my $iso_parser = DateTime::Format::ISO8601->new( legacy_year => $n );
39    isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
40    is( $iso_parser->legacy_year, $n );
41
42    {
43        my $iso_parser = DateTime::Format::ISO8601->new->set_legacy_year( $n );
44        is( $iso_parser->legacy_year, $n );
45    }
46}
47
48foreach my $n ( -3 .. -1, 2 .. 4 ) {
49    eval { DateTime::Format::ISO8601->new( legacy_year => $n ) };
50    like( $@, qr/did not pass the 'is 0, 1, or undef' callback/ );
51
52    eval { DateTime::Format::ISO8601->new->set_legacy_year( $n ) };
53    like( $@, qr/did not pass the 'is 0, 1, or undef' callback/ );
54}
55
56{
57    my $failed = 0;
58
59    foreach my $year ( 0 .. 99 ) {
60        $year *= 100; # [0, 9900], step 100
61        my $iso_parser = DateTime::Format::ISO8601->new(
62            legacy_year     => 0,
63            base_datetime   => DateTime->new( year => $year ),
64        );
65
66        foreach my $tdy ( 0 .. 9 ) {
67            $tdy *= 10; # [0, 90], step 10
68            $tdy = sprintf( "%02d", $tdy );
69            my $dt = $iso_parser->parse_datetime( "-$tdy" );
70            $failed++ unless $dt->year eq sprintf(
71                "%d", $iso_parser->base_datetime->strftime( "%C" ) . $tdy );
72        }
73    }
74
75    is( $failed, 0, "parse_datetime() with a base_datetime" );
76}
77