#!perl
use strict;
use Test::More (tests => 27);
BEGIN
{
use_ok("DateTime::Format::Japanese", ':constants');
}
use Encode;
my @params = (
[
DateTime->new(year => 2004, month => 1, day => 29, hour => 11, minute => 49, second => 34),
{
"平成一六年一月二九日一一時四九分三四秒" =>
[ FORMAT_KANJI, FORMAT_ERA, 0, 0, 0 ],
"平成十六年一月二十九日十一時四十九分三十四秒" =>
[ FORMAT_KANJI_WITH_UNIT, FORMAT_ERA, 0, 0, 0 ],
"平成16年1月29日11時49分34秒" =>
[ FORMAT_ZENKAKU, FORMAT_ERA, 0, 0, 0 ],
"平成16年1月29日11時49分34秒" =>
[ FORMAT_ROMAN, FORMAT_ERA, 0, 0, 0 ],
"平成16年1月29日11時49分34秒木曜日" =>
[ FORMAT_ZENKAKU, FORMAT_ERA, 0, 0, 0, 1 ],
"平成16年1月29日11時49分34秒" =>
[ FORMAT_ROMAN, FORMAT_ERA, 0, 0, 0 ],
"2004年1月29日11時49分34秒" =>
[ FORMAT_ROMAN, FORMAT_GREGORIAN, 0, 0, 0 ],
"西暦2004年1月29日11時49分34秒" =>
[ FORMAT_ROMAN, FORMAT_GREGORIAN, 1, 0, 0 ],
"西暦2004年1月29日午前11時49分34秒" =>
[ FORMAT_ROMAN, FORMAT_GREGORIAN, 1, 0, 1 ],
"西暦二〇〇四年一月二九日一一時四九分三四秒" =>
[ FORMAT_KANJI, FORMAT_GREGORIAN, 1, 0, 0 ],
"二〇〇四年一月二十九日十一時四十九分三十四秒" =>
[ FORMAT_KANJI_WITH_UNIT, FORMAT_GREGORIAN, 0, 0, 0 ],
}
],
[
DateTime->new(year => -2004, month => 1, day => 29, hour => 11, minute => 49, second => 34),
{
"-二〇〇四年一月二九日一一時四九分三四秒" =>
[ FORMAT_KANJI, FORMAT_GREGORIAN, 0, 0, 0 ],
"西暦-二〇〇四年一月二九日一一時四九分三四秒" =>
[ FORMAT_KANJI, FORMAT_GREGORIAN, 1, 0, 0 ],
"紀元前西暦二〇〇四年一月二九日一一時四九分三四秒" =>
[ FORMAT_KANJI, FORMAT_GREGORIAN, 1, 1, 0 ],
}
]
);
my($dt, $str, $fmt);
foreach my $param (@params) {
$fmt = DateTime::Format::Japanese->new(input_encoding => 'utf-8', output_encoding => 'utf-8');
while (my($expected, $args) = each %{$param->[1]}) {
$fmt->number_format($args->[0]);
$fmt->year_format($args->[1]);
$fmt->with_gregorian_marker($args->[2]);
$fmt->with_bc_marker($args->[3]);
$fmt->with_ampm_marker($args->[4]);
$fmt->with_day_of_week($args->[5]);
$str = eval{ $fmt->format_datetime($param->[0]) };
is($str, $expected, "Test " . $param->[0]->datetime . " = " . $expected . ($@ ? " $@" : ''));
$dt = $fmt->parse_datetime($str);
is($param->[0]->compare($dt), 0, "Test parsing back result");
}
}