004_locale_defaults.t [plain text]
#!perl -w
# t/004_locale_defaults.t - check module dates in various formats
use Test::More tests => 60;
use DateTime::Format::Strptime;
use DateTime;
use DateTime::TimeZone;
use DateTime::Locale;
my $object = DateTime::Format::Strptime->new(
pattern => '%c',
diagnostic => 0,
on_error => sub { warn @_ },
);
my @tests = (
# Australian English
[ 'en_AU', '%x', '31/12/98' ],
[ 'en_AU', '%X', '13:34:56' ],
[ 'en_AU', '%c', 'Thu 31 Dec 1998 13:34:56 AEDT' ],
# US English
[ 'en_US', '%x', '12/31/1998' ],
[ 'en_US', '%X', '01:34:56 PM' ],
[ 'en_US', '%c', 'Thu 31 Dec 1998 01:34:56 PM MST' ],
# UK English
[ 'en_GB', '%x', '31/12/98' ],
[ 'en_GB', '%X', '13:34:56' ],
[ 'en_GB', '%c', 'Thu 31 Dec 1998 13:34:56 GMT' ],
# French French
[ 'fr_FR', '%x', '31/12/1998' ],
[ 'fr_FR', '%X', '13:34:56' ],
[ 'fr_FR', '%c', 'jeu. 31 Déc 1998 13:34:56 CEST' ],
# French Generic - inherits from root locale for glibc formats
[ 'fr', '%x', '12/31/98' ],
[ 'fr', '%X', '13:34:56' ],
[ 'fr', '%c', 'jeu. Déc 31 13:34:56 1998' ],
);
foreach (@tests) {
my ( $locale, $pattern, $data ) = @$_;
$object->locale($locale);
$object->pattern($pattern);
my $datetime = $object->parse_datetime($data);
unless ($datetime) {
fail("Could not parse $data with $pattern for $locale") for 1..3;
next;
}
if ( $pattern eq '%x' or $pattern eq '%c' ) {
is( $datetime->year, 1998, $locale . ' : ' . $pattern . ' : year' );
is( $datetime->month, 12, $locale . ' : ' . $pattern . ' : month' );
is( $datetime->day, 31, $locale . ' : ' . $pattern . ' : day' );
}
if ( $pattern eq '%X' or $pattern eq '%c' ) {
is( $datetime->hour, 13, $locale . ' : ' . $pattern . ' : hour' );
is( $datetime->minute, 34, $locale . ' : ' . $pattern . ' : minute' );
is( $datetime->second, 56, $locale . ' : ' . $pattern . ' : second' );
}
}