JSON-YY
view release on metacpan or search on metacpan
t/15_minor_gaps.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use File::Temp qw(tempfile);
use JSON::YY ':doc';
use JSON::YY qw(encode_json);
# NaN/Inf via OO pretty path
{
my $c = JSON::YY->new(utf8 => 1, pretty => 1);
eval { $c->encode(9**9**9) };
like $@, qr/NaN|Inf/i, 'OO pretty encode Inf croaks';
eval { $c->encode(-9**9**9) };
like $@, qr/NaN|Inf/i, 'OO pretty encode -Inf croaks';
}
# jwrite on subtree Doc
{
my ($fh, $tmp) = tempfile(SUFFIX => ".json");
close $fh;
my $doc = jdoc '{"a":{"x":1},"b":2}';
my $sub = jget $doc, "/a";
jwrite $sub, $tmp;
my $back = jread $tmp;
is jencode $back, "", '{"x":1}', 'jwrite subtree Doc writes only subtree';
unlink $tmp;
}
# jset "" on borrowed Doc croaks
{
my $doc = jdoc '{"a":1}';
my $sub = jget $doc, "/a";
eval { jset $sub, "", 42 };
like $@, qr/borrowed/, 'jset empty path on borrowed Doc croaks';
}
# jraw "" on borrowed Doc croaks
{
my $doc = jdoc '{"a":1}';
my $sub = jget $doc, "/a";
eval { jraw $sub, "", '42' };
like $@, qr/borrowed/, 'jraw empty path on borrowed Doc croaks';
}
# jpatch/jmerge on borrowed Doc croaks
{
my $doc = jdoc '{"a":1}';
my $sub = jget $doc, "/a";
my $patch = jdoc '[{"op":"add","path":"/x","value":1}]';
eval { jpatch $sub, $patch };
like $@, qr/borrowed/, 'jpatch on borrowed Doc croaks';
eval { jmerge $sub, jdoc '{"x":1}' };
like $@, qr/borrowed/, 'jmerge on borrowed Doc croaks';
}
# jpaths on scalar root
{
my $doc = jdoc '"hello"';
my @paths = jpaths $doc, "";
is scalar @paths, 1, 'jpaths scalar root returns one path';
is $paths[0], '', 'jpaths scalar root path is empty string';
}
# jpaths with nested empty container (leak regression test)
{
my $doc = jdoc '{"a":{"empty_obj":{},"empty_arr":[]},"b":1}';
my @paths = jpaths $doc, "";
is_deeply [sort @paths], ['/b'], 'jpaths skips nested empty containers';
}
# jfind on non-array returns undef
{
my $doc = jdoc '{"obj":{"a":1}}';
( run in 3.025 seconds using v1.01-cache-2.11-cpan-d8267643d1d )