#!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"); } }