#!perl
$|++;
use strict;
use utf8;
use Test::More;
eval "use JSON::Any";
if ($@) {
plan skip_all => "$@";
exit;
}
$ENV{JSON_ANY_CONFIG} = "utf8=1";
foreach my $backend qw(XS JSON DWIW Syck) {
my $j = eval {
JSON::Any->import($backend);
JSON::Any->new;
};
diag "$backend: " . $@ and next if $@;
$j and $j->handler or next;
diag "handler is " . ( ref( $j->handler ) || $j->handlerType );
plan 'no_plan' unless $ENV{JSON_ANY_RAN_TESTS};
$ENV{JSON_ANY_RAN_TESTS} = 1;
foreach my $text qw(foo שלום) {
my $struct = [$text];
my $frozen = $j->encode($struct);
my $thawed = $j->decode($frozen);
ok( utf8::is_utf8($frozen) || !scalar( $frozen !~ /[\w\d[:punct:]]/ ),
"json output is utf8" );
is_deeply( $thawed, $struct, "deeply" );
is( $thawed->[0], $text, "text is the same" ) || eval {
require Devel::StringInfo;
my $d = Devel::StringInfo->new;
$d->dump_info( $text, name => "expected" );
$d->dump_info( $thawed->[0], name => "got" );
$d->dump_info($frozen);
};
ok( utf8::is_utf8( $thawed->[0] ) || !scalar( $text !~ /[a-z]/ ),
"text is utf8 if it needs to be" );
if ( utf8::valid($frozen) ) {
utf8::decode($frozen);
my $thawed = $j->decode($frozen);
is_deeply( $thawed, $struct, "deeply" );
is( $thawed->[0], $text, "text is the same" ) || eval {
require Devel::StringInfo;
my $d = Devel::StringInfo->new;
$d->dump_info( $text, name => "expected" );
$d->dump_info( $thawed->[0], name => "got" );
$d->dump_info($frozen);
};
ok( utf8::is_utf8( $thawed->[0] ) || !scalar( $text !~ /[a-z]/ ),
"text is utf8 if it needs to be" );
}
}
}
plan skip_all => 'no JSON package with unicode support installed'
unless $ENV{JSON_ANY_RAN_TESTS};