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