The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use utf8;
use Encode::JP::Mobile::Character;
use Test::More tests => 25;

# docomo
{
    my $char = Encode::JP::Mobile::Character->from_unicode(0xE63E);
    is $char->name, "晴れ";
    ok Encode::is_utf8($char->name), 'flagged';
    is $char->name_en, "Fine";
    is $char->unicode_hex, "E63E";
    is $char->number, 1;
    is $char->fallback_name('I'), undef;
}

# docomo ext
{
    my $char = Encode::JP::Mobile::Character->from_unicode(0xE757);
    is $char->number, "拡76", 'docomo ext';
    ok Encode::is_utf8($char->number);
}

{
    is(Encode::JP::Mobile::Character->from_number(carrier => 'I', number => "拡76")->unicode_hex, 'E757');
}

# KDDI
{
    my $char = Encode::JP::Mobile::Character->from_unicode(0xECA2);
    is $char->fallback_name('I'), "(>3<)";
    is $char->fallback_name('H'), "(>3<)", "airhphone is same as docomo";
    ok Encode::is_utf8($char->fallback_name('I'));
    is $char->name, "チュー2", "What's name for 0xECA2";
    ok Encode::is_utf8($char->name);
    is $char->number, 455, 'number';
}

# KDDI from number.
{
    is(Encode::JP::Mobile::Character->from_number(carrier => 'E', number => 455)->unicode_hex, 'ECA2');
    eval { Encode::JP::Mobile::Character->from_number(carrier => 'E', number => 1000000) }; like $@, qr{^unknown number: 1000000 for kddi};
}

# softbank from number
is(Encode::JP::Mobile::Character->from_number(carrier => 'V', number => 1)->unicode_hex, 'E001');

# carrier
my $map = +{
    0xE532 => 'V',
    0xECE7 => 'E',
    0xE6E5 => 'I',
};
while (my ($unicode, $carrier) = each %$map) {
    is(Encode::JP::Mobile::Character->from_unicode($unicode)->carrier, $carrier, "carrier $carrier");
}

# validation
eval { Encode::JP::Mobile::Character->from_number(number => 3) }; like $@, qr{^missing carrier}, 'validation';
eval { Encode::JP::Mobile::Character->from_number(carrier => 'E') }; like $@, qr{^missing number}, 'validation';
eval { Encode::JP::Mobile::Character->from_unicode(0xE63E)->fallback_name }; like $@, qr{^missing carrier}, 'validation';
eval { Encode::JP::Mobile::Character->from_unicode(0xE63E)->fallback_name('G') }; like $@, qr{^invalid carrier name\(I or E or V\)}, 'validation';