use strict; use warnings; use Encode; use Encode::JP::Mobile; use Test::More 'no_plan'; my $map = do "dat/convert-map-utf8.pl"; for my $from_carrier (qw( docomo kddi softbank )) { my $list = do "dat/$from_carrier-table.pl"; for my $row (@$list) { my $code = $row->{unicode_auto} || $row->{unicode}; my $convert_to = $map->{$from_carrier}{$code}; test_all($from_carrier, $code, $convert_to); } } sub test_all { my ($from_carrier, $code, $convert_to) = @_; my $char = chr hex $code; for my $target_carrier (qw( docomo kddi softbank )) { next if $target_carrier eq $from_carrier; my $convert = $convert_to->{$target_carrier}; my $encoding = "x-utf8-$target_carrier"; if ($convert->{type} eq 'pictogram') { my $pictogram = do { my $u = $convert->{unicode}; $u =~ s{(....)}{chr hex $1}ge; $u; }; is encode($encoding, $char), encode($encoding, $pictogram), "U+$code $from_carrier => $target_carrier (emoji to emoji[s])"; } elsif ($convert->{type} eq 'name') { my $name = $convert->{unicode}; is encode($encoding, $char, Encode::JP::Mobile::FB_CHARACTER), $name, "U+$code $from_carrier => $target_carrier (fallback)"; } } }