1#!perl -w
2
3# t/002_basic.t - check module dates in various formats
4
5use Test::More 0.88;
6use DateTime::Format::Strptime;
7use DateTime;
8use DateTime::TimeZone;
9
10my $object = DateTime::Format::Strptime->new(
11    pattern => '%D',
12
13    #	time_zone => 'Australia/Melbourne',
14    diagnostic => 1,
15    on_error   => 'croak',
16);
17
18my @tests = (
19
20    # Simple dates
21    [ '%Y-%m-%d',          '1998-12-31' ],
22    [ '%y-%m-%d',          '98-12-31' ],
23    [ '%Y years, %j days', '1998 years, 312 days' ],
24    [ '%b %d, %Y',         'Jan 24, 2003' ],
25    [ '%B %d, %Y',         'January 24, 2003' ],
26
27    # Simple times
28    [ '%H:%M:%S',    '23:45:56' ],
29    [ '%l:%M:%S %p', '11:34:56 PM' ],
30
31    # With Nanoseconds
32    [ '%H:%M:%S.%N',  '23:45:56.123456789' ],
33    [ '%H:%M:%S.%6N', '23:45:56.123456' ],
34    [ '%H:%M:%S.%3N', '23:45:56.123' ],
35
36    # Complex dates
37    [ '%Y;%j = %Y-%m-%d',      '2003;56 = 2003-02-25' ],
38    [ q|%d %b '%y = %Y-%m-%d|, q|25 Feb '03 = 2003-02-25| ],
39
40    # Leading spaces
41    [ '%e-%b-%Y %T %z', '13-Jun-2010 09:20:47 -0400' ],
42    [ '%e-%b-%Y %T %z', ' 3-Jun-2010 09:20:47 -0400' ],
43);
44
45foreach (@tests) {
46    my ( $pattern, $data, $expect ) = @$_;
47    $expect ||= $data;
48    $object->pattern($pattern);
49    is(
50        $object->format_datetime( $object->parse_datetime($data) ), $expect,
51        $pattern
52    );
53}
54
55SKIP: {
56    skip
57        "You don't have the latest DateTime. Older version have a bug whereby 12am and 12pm are shown as 0am and 0pm. You should upgrade.",
58        1
59        unless $DateTime::VERSION >= 0.11;
60
61    $object->pattern('%l:%M:%S %p');
62    is(
63        $object->format_datetime( $object->parse_datetime('12:34:56 AM') ),
64        '12:34:56 AM', '%l:%M:%S %p'
65    );
66}
67
68# Timezones
69SKIP: {
70    skip
71        "You don't have the latest DateTime::TimeZone. Older versions don't display all time zone information. You should upgrade.",
72        3
73        unless $DateTime::TimeZone::VERSION >= 0.13;
74
75    $object->pattern('%H:%M:%S %z');
76    is(
77        $object->format_datetime( $object->parse_datetime('23:45:56 +1000') ),
78        '23:45:56 +1000', '%H:%M:%S %z'
79    );
80
81    $object->pattern('%H:%M:%S %Z');
82    is(
83        $object->format_datetime( $object->parse_datetime('23:45:56 AEST') ),
84        '23:45:56 +1000', '%H:%M:%S %Z'
85    );
86
87    $object->pattern('%H:%M:%S %z %Z');
88    is(
89        $object->format_datetime(
90            $object->parse_datetime('23:45:56 +1000 AEST')
91        ),
92        '23:45:56 +1000 +1000',
93        '%H:%M:%S %z %Z'
94    );
95}
96
97$object->time_zone('Australia/Perth');
98$object->pattern('%Y %H:%M:%S %Z');
99is(
100    $object->format_datetime( $object->parse_datetime('2003 23:45:56 MDT') ),
101    '2003 13:45:56 WST', $object->pattern
102);
103
104done_testing();
105