1BEGIN { 2 $ENV{PERL_DATETIME_PP} = 1; 3} 4 5use strict; 6use warnings; 7 8use Test::More; 9 10use DateTime; 11 12unless ( eval { require Storable; 1 } ) { 13 plan skip_all => 'Cannot load Storable'; 14} 15 16{ 17 my @dt = ( 18 DateTime->new( 19 year => 1950, 20 hour => 1, 21 nanosecond => 1, 22 time_zone => 'America/Chicago', 23 locale => 'de' 24 ), 25 DateTime::Infinite::Past->new, 26 DateTime::Infinite::Future->new, 27 ); 28 29 foreach my $dt (@dt) { 30 my $copy = Storable::thaw( Storable::nfreeze($dt) ); 31 32 is( 33 $copy->time_zone->name, $dt->time_zone->name, 34 'Storable freeze/thaw preserves tz' 35 ); 36 37 is( 38 ref $copy->locale, ref $dt->locale, 39 'Storable freeze/thaw preserves locale' 40 ); 41 42 is( 43 $copy->year, $dt->year, 44 'Storable freeze/thaw preserves rd values' 45 ); 46 47 is( 48 $copy->hour, $dt->hour, 49 'Storable freeze/thaw preserves rd values' 50 ); 51 52 is( 53 $copy->nanosecond, $dt->nanosecond, 54 'Storable freeze/thaw preserves rd values' 55 ); 56 } 57} 58 59{ 60 my $dt1 = DateTime->now( locale => 'en-US' ); 61 my $dt2 = Storable::dclone($dt1); 62 my $dt3 = Storable::thaw( Storable::nfreeze($dt2) ); 63 64 is( 65 $dt1->iso8601, $dt2->iso8601, 66 'dclone produces date equal to original' 67 ); 68 is( 69 $dt2->iso8601, $dt3->iso8601, 70 'explicit freeze and thaw produces date equal to original' 71 ); 72 73 # Back-compat shim for new DateTime::Locale. Remove once DT::Locale based 74 # on CLDR 28+ is released. 75 my $meth = $dt1->locale->can('code') ? 'code' : 'id'; 76 my $orig_code = $dt1->locale->$meth; 77 is( 78 $dt2->locale->$meth, 79 $orig_code, 80 'check locale id after dclone' 81 ); 82 is( 83 $dt3->locale->$meth, 84 $orig_code, 85 'check locale id after explicit freeze/thaw' 86 ); 87} 88 89{ 90 package Formatter; 91 92 sub format_datetime { } 93} 94 95{ 96 my $dt = DateTime->new( 97 year => 2004, 98 formatter => 'Formatter', 99 ); 100 101 my $copy = Storable::thaw( Storable::nfreeze($dt) ); 102 103 is( 104 $dt->formatter, $copy->formatter, 105 'Storable freeze/thaw preserves formatter' 106 ); 107} 108 109done_testing(); 110 111