1#!/perl -I.. 2 3use strict; 4use Test::More tests => 61; 5use lib 'blib/lib', 'blib/arch'; 6 7# time-as-string tests 8 9BEGIN { $Time::Format::NOXS = 1 } 10BEGIN { use_ok 'Time::Format', qw(time_format %time) } 11 12# Get day/month names in current locale 13my ($Thursday, $Thu, $June, $Jun); 14unless (eval 15 { 16 require I18N::Langinfo; 17 I18N::Langinfo->import(qw(langinfo DAY_3 MON_12 DAY_5 ABDAY_5 MON_6 ABMON_6)); 18 ($Thursday, $Thu, $June, $Jun) = map ucfirst lc langinfo($_), (DAY_5(), ABDAY_5(), MON_6(), ABMON_6()); 19 1; 20 }) 21{ 22 ($Thursday, $Thu, $June, $Jun) = qw(Thursday Thu June Jun); 23} 24 25# June 5, 2003 at 1:58:09 pm 26my $d = '2003-06-05'; 27my $t = '13:58:09'; 28my $d_t = "$d $t"; 29my $dTt = "${d}T$t"; 30my $dt = "$d$t"; 31my $dtx; 32($dtx = $dt) =~ tr/-://d; # no separators at all 33 34# Date/time strings with Z (UTC indicator) appended. Per CPAN RT bug 55630. 35my ($tz, $d_tz, $dTtz, $dtz, $dtxz); 36($tz, $d_tz, $dTtz, $dtz, $dtxz) = map {$_ . 'Z'} ($t, $d_t, $dTt, $dt, $dtx); 37my $out; 38my $err; 39 40# time_format tests (22 * 2) 41is time_format('yyyymmdd', $d), '20030605' => 'ymd f() d only'; 42is time_format('yyyymmdd', $t), '19691231' => 'ymd f() t only'; 43is time_format('yyyymmdd', $d_t), '20030605' => 'ymd f() d&t'; 44is time_format('yyyymmdd', $dTt), '20030605' => 'ymd f() d T t'; 45is time_format('yyyymmdd', $dt), '20030605' => 'ymd f() dt'; 46is time_format('yyyymmdd', $dtx), '20030605' => 'ymd f() dt-nosep'; 47is time_format('yyyymmdd', $tz), '19691231' => 'ymd f() t only (z)'; 48is time_format('yyyymmdd', $d_tz), '20030605' => 'ymd f() d&t (z)'; 49is time_format('yyyymmdd', $dTtz), '20030605' => 'ymd f() d T t (z)'; 50is time_format('yyyymmdd', $dtz), '20030605' => 'ymd f() dt (z)'; 51is time_format('yyyymmdd', $dtxz), '20030605' => 'ymd f() dt-nosep (z)'; 52 53is time_format('hhmmss', $d), '000000' => 'hms f() d only'; 54is time_format('hhmmss', $t), '135809' => 'hms f() t only'; 55is time_format('hhmmss', $d_t), '135809' => 'hms f() d&t'; 56is time_format('hhmmss', $dTt), '135809' => 'hms f() d T t'; 57is time_format('hhmmss', $dt), '135809' => 'hms f() dt'; 58is time_format('hhmmss', $dtx), '135809' => 'hms f() dt-nosep'; 59is time_format('hhmmss', $tz), '135809' => 'hms f() t only (zz)'; 60is time_format('hhmmss', $d_tz), '135809' => 'hms f() d&t (zz)'; 61is time_format('hhmmss', $dTtz), '135809' => 'hms f() d T t (zz)'; 62is time_format('hhmmss', $dtz), '135809' => 'hms f() dt (zz)'; 63is time_format('hhmmss', $dtxz), '135809' => 'hms f() dt-nosep (zz)'; 64 65is $time{'yyyymmdd', $d}, '20030605' => 'ymd %{} d only'; 66is $time{'yyyymmdd', $t}, '19691231' => 'ymd %{} t only'; 67is $time{'yyyymmdd', $d_t}, '20030605' => 'ymd %{} d&t'; 68is $time{'yyyymmdd', $dTt}, '20030605' => 'ymd %{} d T t'; 69is $time{'yyyymmdd', $dt}, '20030605' => 'ymd %{} dt'; 70is $time{'yyyymmdd', $dtx}, '20030605' => 'ymd %{} dt-nosep'; 71is $time{'yyyymmdd', $tz}, '19691231' => 'ymd %{} t only (z)'; 72is $time{'yyyymmdd', $d_tz}, '20030605' => 'ymd %{} d&t (z)'; 73is $time{'yyyymmdd', $dTtz}, '20030605' => 'ymd %{} d T t (z)'; 74is $time{'yyyymmdd', $dtz}, '20030605' => 'ymd %{} dt (z)'; 75is $time{'yyyymmdd', $dtxz}, '20030605' => 'ymd %{} dt-nosep (z)'; 76 77is $time{'hhmmss', $d}, '000000' => 'hms %{} d only'; 78is $time{'hhmmss', $t}, '135809' => 'hms %{} t only'; 79is $time{'hhmmss', $d_t}, '135809' => 'hms %{} d&t'; 80is $time{'hhmmss', $dTt}, '135809' => 'hms %{} d T t'; 81is $time{'hhmmss', $dt}, '135809' => 'hms %{} dt'; 82is $time{'hhmmss', $dtx}, '135809' => 'hms %{} dt-nosep'; 83is $time{'hhmmss', $tz}, '135809' => 'hms %{} t only (z)'; 84is $time{'hhmmss', $d_tz}, '135809' => 'hms %{} d&t (z)'; 85is $time{'hhmmss', $dTtz}, '135809' => 'hms %{} d T t (z)'; 86is $time{'hhmmss', $dtz}, '135809' => 'hms %{} dt (z)'; 87is $time{'hhmmss', $dtxz}, '135809' => 'hms %{} dt-nosep (z)'; 88 89# Whatever the local time zone, 'Z' times should be reported as UTC. (5 * 2) 90is time_format('tz', $tz), 'UTC' => 'tzone f() t only (z)'; 91is time_format('tz', $d_tz), 'UTC' => 'tzone f() d&t (z)'; 92is time_format('tz', $dTtz), 'UTC' => 'tzone f() d T t (z)'; 93is time_format('tz', $dtz), 'UTC' => 'tzone f() dt (z)'; 94is time_format('tz', $dtxz), 'UTC' => 'tzone f() dt-nosep (z)'; 95 96is $time{'tz', $tz}, 'UTC' => 'tzone %{} t only (z)'; 97is $time{'tz', $d_tz}, 'UTC' => 'tzone %{} d&t (z)'; 98is $time{'tz', $dTtz}, 'UTC' => 'tzone %{} d T t (z)'; 99is $time{'tz', $dtz}, 'UTC' => 'tzone %{} dt (z)'; 100is $time{'tz', $dtxz}, 'UTC' => 'tzone %{} dt-nosep (z)'; 101 102 103# Reported bug case: 104eval { $out = time_format('yyyy.mm.dd', '2007.12.31'); }; 105is $@, '', 'December bug I: no error'; 106is $out, '2007.12.31' => 'December bug I'; 107 108eval { $out = time_format('yyyy.mm.dd', '2000.01.01'); }; 109is $@, '', 'December bug II: no error'; 110is $out, '2000.01.01' => 'December bug II'; 111 112eval { $out = time_format('yyyy.mm.dd', '1968.01.01'); }; 113is $@, '', 'December bug III: no error'; 114is $out, '1968.01.01' => 'December bug III'; 115