1#!perl -w
2
3# t/004_locale_defaults.t - check module dates in various formats
4
5use Test::More 0.88;
6use DateTime::Format::Strptime;
7use DateTime;
8use DateTime::TimeZone;
9use DateTime::Locale;
10
11my $object = DateTime::Format::Strptime->new(
12    pattern    => '%c',
13    diagnostic => 0,
14    on_error   => sub { warn @_ },
15);
16
17my @tests = (
18
19    # Australian English
20    [ 'en_AU', '%x', '31/12/98' ],
21    [ 'en_AU', '%X', '13:34:56' ],
22    [ 'en_AU', '%c', 'Thu 31 Dec 1998 13:34:56 AEDT' ],
23
24    # US English
25    [ 'en_US', '%x', '12/31/1998' ],
26    [ 'en_US', '%X', '01:34:56 PM' ],
27    [ 'en_US', '%c', 'Thu 31 Dec 1998 01:34:56 PM MST' ],
28
29    # UK English
30    [ 'en_GB', '%x', '31/12/98' ],
31    [ 'en_GB', '%X', '13:34:56' ],
32    [ 'en_GB', '%c', 'Thu 31 Dec 1998 13:34:56 GMT' ],
33
34    # French French
35    [ 'fr_FR', '%x', '31/12/1998' ],
36    [ 'fr_FR', '%X', '13:34:56' ],
37    [ 'fr_FR', '%c', 'jeu. 31 D�c 1998 13:34:56 CEST' ],
38
39    # French Generic - inherits from root locale for glibc formats
40    [ 'fr', '%x', '12/31/98' ],
41    [ 'fr', '%X', '13:34:56' ],
42    [ 'fr', '%c', 'jeu. D�c 31 13:34:56 1998' ],
43);
44
45foreach (@tests) {
46    my ( $locale, $pattern, $data ) = @$_;
47    $object->locale($locale);
48    $object->pattern($pattern);
49    my $datetime = $object->parse_datetime($data);
50
51    unless ($datetime) {
52        fail("Could not parse $data with $pattern for $locale") for 1..3;
53        next;
54    }
55
56    if ( $pattern eq '%x' or $pattern eq '%c' ) {
57        is( $datetime->year,  1998, $locale . ' : ' . $pattern . ' : year' );
58        is( $datetime->month, 12,   $locale . ' : ' . $pattern . ' : month' );
59        is( $datetime->day,   31,   $locale . ' : ' . $pattern . ' : day' );
60    }
61    if ( $pattern eq '%X' or $pattern eq '%c' ) {
62        is( $datetime->hour,   13, $locale . ' : ' . $pattern . ' : hour' );
63        is( $datetime->minute, 34, $locale . ' : ' . $pattern . ' : minute' );
64        is( $datetime->second, 56, $locale . ' : ' . $pattern . ' : second' );
65    }
66}
67
68done_testing();
69