YAML-PP
view release on metacpan or search on metacpan
t/lib/YAML/PP/Test.pm view on Meta::CPAN
my $id = $testcase->{id};
my $title = $testcase->{title};
my $err = $result->{err};
my $yaml = $testcase->{in_yaml};
my $test_events = $testcase->{test_events};
my $ok = 0;
if (not $err) {
push @{ $stats->{OK} }, $id;
ok(0, "$id - $title - should be invalid");
}
else {
push @{ $stats->{ERROR} }, $id;
if (not $result->{events}) {
$ok = ok(1, "$id - $title");
}
else {
$ok = is_deeply($result->{events}, $test_events, "$id - $title");
}
}
if ($ok) {
}
else {
push @{ $stats->{DIFF} }, $id;
if ($testcase->{todo}) {
push @{ $stats->{TODO} }, $id;
}
if (not $testcase->{todo} or $ENV{YAML_PP_TRACE}) {
diag "YAML:\n$yaml" unless $testcase->{todo};
diag "EVENTS:\n" . join '', map { "$_\n" } @$test_events;
diag "GOT EVENTS:\n" . join '', map { "$_\n" } @{ $result->{events} };
}
}
}
sub load_json {
my ($self, $testcase) = @_;
my $ypp = YAML::PP->new(boolean => 'JSON::PP', schema => [qw/ Core Catchall /]);
my @docs = eval { $ypp->load_string($testcase->{in_yaml}) };
my $err = $@;
return {
data => \@docs,
err => $err,
};
}
sub compare_load_json {
my ($self, $testcase, $result) = @_;
my $stats = $self->{stats};
my $id = $testcase->{id};
my $title = $testcase->{title};
my $err = $result->{err};
my $yaml = $testcase->{in_yaml};
my $exp_json = $testcase->{in_json};
my $docs = $result->{data};
# input can contain multiple JSON
my @exp_json = split m/^(?=true|false|null|[0-9"\{\[])/m, $exp_json;
$exp_json = '';
my $coder = JSON::PP->new->ascii->pretty->allow_nonref->canonical;
for my $exp (@exp_json) {
my $data = $coder->decode($exp);
$exp = $coder->encode($data);
$exp_json .= $exp;
}
my $json = '';
for my $doc (@$docs) {
my $j = $coder->encode($doc);
$json .= $j;
}
my $ok = 0;
if ($err) {
push @{ $stats->{ERROR} }, $id;
ok(0, "$id - $title - ERROR");
}
else {
$ok = cmp_ok($json, 'eq', $exp_json, "$id - load -> JSON equals expected JSON");
if ($ok) {
push @{ $stats->{OK} }, $id;
}
else {
push @{ $stats->{DIFF} }, $id;
}
}
unless ($ok) {
if ($testcase->{todo}) {
push @{ $stats->{TODO} }, $id;
}
if (not $testcase->{todo} or $ENV{YAML_PP_TRACE}) {
diag "YAML:\n$yaml" unless $testcase->{todo};
diag "JSON:\n" . $exp_json;
diag "GOT JSON:\n" . $json;
}
}
}
sub dump_yaml {
my ($self, $testcase) = @_;
my $id = $testcase->{id};
my $ypp = YAML::PP->new( boolean => 'JSON::PP', duplicate_keys => 1, schema => [qw/ + Catchall /] );
my @docs = eval { $ypp->load_string($testcase->{in_yaml}) };
my $err = $@;
my $result = {};
if ($err) {
diag "ERROR loading $id";
$result->{err} = $err;
return $result;
}
my $out_yaml;
eval {
$out_yaml = $ypp->dump_string(@docs);
};
$err = $@;
( run in 1.133 second using v1.01-cache-2.11-cpan-71847e10f99 )