1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
use strict;
use warnings;
use Test::Builder;
use Test::More;
use Encode ();
use MaxMind::DB::Reader::Decoder;
use MaxMind::DB::Writer::Serializer;
{
my $tb = Test::Builder->new();
for ( $tb->output, $tb->failure_output, $tb->todo_output ) {
binmode $_, ':encoding(UTF-8)' or die $!;
}
}
my $input = "\x{4eba}";
ok(
Encode::is_utf8($input),
'input is marked as utf8 in Perl'
);
my $serializer
= MaxMind::DB::Writer::Serializer->new( map_key_type_callback => sub { }
);
$serializer->store_data( utf8_string => $input );
my $buffer = $serializer->buffer();
## no critic (InputOutput::RequireBriefOpen)
open my $fh, '<:raw', $buffer or die $!;
my $decoder = MaxMind::DB::Reader::Decoder->new(
data_source => $fh,
## no critic (Modules::RequireExplicitInclusion, Subroutines::ProhibitCallsToUnexportedSubs)
_data_source_size => bytes::length( ${$buffer} ),
);
my $output = $decoder->decode(0);
ok(
Encode::is_utf8($output),
'output is marked as utf8 in Perl'
);
is(
$input,
$output,
"utf-8 string ($input) makes round trip from serializer to decoder safely"
);
done_testing();
|