1# Copyright (C) 2005 Joshua Hoblitt 2use strict; 3use warnings; 4 5use Test2::V0; 6 7use DateTime::Format::ISO8601; 8 9{ 10 is( 11 DateTime::Format::ISO8601->DefaultLegacyYear, 1, 12 'default legacy year is 1' 13 ); 14 my $iso_parser = DateTime::Format::ISO8601->new; 15 is( $iso_parser->legacy_year, 1, 'legacy_year is 1' ); 16} 17 18for my $n ( 0, 1, undef ) { 19 DateTime::Format::ISO8601->DefaultLegacyYear($n); 20 is( 21 DateTime::Format::ISO8601->DefaultLegacyYear, $n, 22 'default legacy was set' 23 ); 24 my $iso_parser = DateTime::Format::ISO8601->new; 25 is( $iso_parser->legacy_year, $n, 'set legacy year' ); 26} 27 28for my $n ( -3 .. -1, 2 .. 4 ) { 29 like( 30 dies { DateTime::Format::ISO8601->DefaultLegacyYear($n) }, 31 qr/Validation failed for type named Bool/, 32 'set legacy year to invalid value', 33 ); 34} 35 36# restore default legacy year behavior 37DateTime::Format::ISO8601->DefaultLegacyYear(1); 38 39for my $n ( 0, 1, undef ) { 40 my $iso_parser = DateTime::Format::ISO8601->new( legacy_year => $n ); 41 isa_ok( $iso_parser, 'DateTime::Format::ISO8601' ); 42 is( $iso_parser->legacy_year, $n, 'pass legacy year to constructor' ); 43 44 $iso_parser = DateTime::Format::ISO8601->new->set_legacy_year($n); 45 is( $iso_parser->legacy_year, $n, 'call set_legacy_year on object' ); 46} 47 48for my $n ( -3 .. -1, 2 .. 4 ) { 49 like( 50 dies { DateTime::Format::ISO8601->new( legacy_year => $n ) }, 51 qr/Validation failed for type named Bool/, 52 'pass invalid legacy year to constructor', 53 ); 54 55 like( 56 dies { DateTime::Format::ISO8601->new->set_legacy_year($n) }, 57 qr/Validation failed for type named Bool/, 58 'pass invalid legacy year to set_legacy_year', 59 ); 60} 61 62for my $year ( 0 .. 99 ) { 63 $year *= 100; # [0, 9900], step 100 64 my $iso_parser = DateTime::Format::ISO8601->new( 65 legacy_year => 0, 66 base_datetime => DateTime->new( year => $year ), 67 ); 68 69 for my $tdy ( 0 .. 9 ) { 70 $tdy *= 10; # [0, 90], step 10 71 $tdy = sprintf( '%02d', $tdy ); 72 my $dt = $iso_parser->parse_datetime("-$tdy"); 73 is( 74 $dt->year, 75 sprintf( 76 '%d', $iso_parser->base_datetime->strftime('%C') . $tdy 77 ), 78 "parses $tdy based on base_datetime with year $year", 79 ); 80 } 81} 82 83done_testing(); 84