The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Data::Dumper;
use Test::More tests => 34;
use Encode;

my @WARN;
BEGIN {
    $SIG{__WARN__} = sub {
        push @WARN, shift;
    };
}

{
    use utf8;    # utf8 mode!

    use charnames ':full';

    is sprintf( "%X", unpack "U*", "\N{DIGIT SIX}" ), "36";
    is charnames::vianame('DIGIT SIX'),           0x36;
    is Encode::is_utf8("\N{HIRAGANA LETTER GA}"), 1;
    is Encode::is_utf8("\N{DIGIT SIX}"),          1;

    use Encode::JP::Mobile::Charnames
      qw( vianame unicode2name unicode2name_en );

    is charnames::vianame('DIGIT SIX'), 0x36;
    is vianame('DoCoMo Beer'),          0xE672;

    is unicode2name(0xE672), 'ビール';
    is unicode2name(0xE047), 'ビール';    # SoftBank

    is unicode2name(0xE5CC), '打ち上げ花火', 'ezweb-cp932';
    is unicode2name(0xF0FC), '打ち上げ花火', 'ezweb-auto';
    is unicode2name(0xE501), 'ラブホテル',
      'kddi-softbank conflict code. should return softbank code';
    ok Encode::is_utf8( unicode2name(0xE672) );

    is unicode2name_en(0xE672), 'Beer';      # DoCoMo
    is unicode2name_en(0xE4C3), 'Beer';      # KDDI-CP932
    is unicode2name_en(0xEF9C), 'Beer';      # KDDI-Auto
    is unicode2name_en(0xE047), 'Beer';      # SoftBank

    is "\N{DoCoMo Beer}",                     "\x{E672}";
    is "\N{DoCoMo ファーストフード}", "\x{E673}";
    is "\N{KDDI Beer}",                       "\x{E4C3}";
    is "\N{SoftBank Beer}",                   "\x{E047}";

    is "\N{DIGIT SIX}", "6";

    {
        my $x = "\N{UNKNOWN CHARACTER}";
        $x = vianame('DoCoMo Foo');
        @WARN = grep !/^Use of uninitialized value/, @WARN; # remove UUV warnings
        is scalar(@WARN), 2, 'check warn num';
        like $WARN[0], qr{Unknown charname 'UNKNOWN CHARACTER'}, 'wanrings when unkown character';
        like $WARN[1], qr{unknown charnames: Foo}, 'warning when unkown character';
    }
    eval { unicode2name() }; like $@, qr{^missing code}, "validation";
    eval { unicode2name_en() }; like $@, qr{^missing code}, "validation";
    eval { vianame() }; like $@, qr{^missing name}, "validation";

    is Encode::is_utf8("\N{DoCoMo Beer}"),                     1;
    is Encode::is_utf8("\N{DoCoMo ファーストフード}"), 1;
    is Encode::is_utf8("\N{HIRAGANA LETTER GA}"),              1;
    is Encode::is_utf8("\N{DIGIT SIX}"),                       1;
}

{
    use bytes; # bytes mode!

    use charnames ':full';

    my $orig = Encode::is_utf8("\N{DIGIT SIX}") ? 'true' : 'false';
    ok "\N{DIGIT SIX}" eq '6';

    use Encode::JP::Mobile::Charnames;

    is Encode::is_utf8("\N{DIGIT SIX}") ? 'true' : 'false', $orig, 'check consistency';
    ok "\N{DIGIT SIX}" eq '6';
}