use strict;
use Test::More tests => 47;
BEGIN { use_ok('Date::Japanese::Era'); }
use encoding "utf-8";
my @tests = (
[ 2001, 9, 1, '平成', 13 ],
[ 1989, 1, 8, '平成', 1 ],
[ 1989, 1, 7, '昭和', 64 ],
[ 1977, 9, 12, '昭和', 52 ],
[ 1926, 12, 25, '昭和', 1 ],
[ 1926, 12, 24, 'taishou', 15 ],
[ 1912, 7, 30, 'taishou', 1 ],
[ 1912, 7, 29, 'meiji', 45 ],
[ 1873, 1, 1, 'meiji', 6 ]
);
for my $test (@tests) {
my($year, $month, $day, $name, $era_year) = @$test;
my $e1 = Date::Japanese::Era->new($year, $month, $day);
if ($name =~ /^[a-zA-Z]+$/) {
is($e1->name_ascii, $name, 'Gregorian to Japanese era (ASCII)');
}
else {
is($e1->name, $name, 'Gregorian to Japanese era');
}
is($e1->year, $era_year);
my $e2 = Date::Japanese::Era->new($name, $era_year);
is($e2->gregorian_year, $year, 'Japanese era to Gregorian');
}
# fail tests
my @fail = (
[ [], 'odd number of arguments: ' ],
[ [ 'xxx', 1 ], 'Unknown era name: ' ],
[ [ '慶応', 12 ], 'Unknown era name: ' ],
[ [ '昭和', 65 ], 'Invalid combination of era and year: ' ],
[ [ 1868, 9, 7 ], 'Unsupported date: ' ],
[ [ 2000, -1, -1 ], 'not a valid date' ], # XXX depends on D::Calc
);
for my $fail (@fail) {
local $SIG{__WARN__} = sub {};
eval {
my $u = Date::Japanese::Era->new(@{$fail->[0]});
};
like($@, qr/$fail->[1]/, 'various ways to fail');
}
my $utf8 = "\xe6\x98\xad\xe5\x92\x8c"; # 昭和
my $era = Date::Japanese::Era->new($utf8, 52);
is($era->name, $utf8, 'input / output UTF-8');
{
my @era;
push @era, Date::Japanese::Era->new('昭和52年');
push @era, Date::Japanese::Era->new('昭和52');
push @era, Date::Japanese::Era->new('昭和52年');
push @era, Date::Japanese::Era->new('昭和52');
push @era, Date::Japanese::Era->new('昭和五十二年');
push @era, Date::Japanese::Era->new('昭和五十二');
for my $e (@era) {
is $e->name, '昭和';
is $e->year, 52;
}
}