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