File Coverage

blib/lib/Test2/Compare/JSON.pm
Criterion Covered Total %
statement 32 32 100.0
branch 4 6 66.6
condition n/a
subroutine 10 10 100.0
pod 4 5 80.0
total 50 53 94.3


line stmt bran cond sub pod time code
1             package Test2::Compare::JSON;
2 3     3   21 use strict;
  3         6  
  3         112  
3 3     3   16 use warnings;
  3         5  
  3         214  
4              
5 3     3   19 use base 'Test2::Compare::Base';
  3         10  
  3         1098  
6              
7 3     3   37154 use Carp qw/croak/;
  3         8  
  3         226  
8              
9 3     3   19 use Test2::Util::HashBase qw/inref json/;
  3         4  
  3         37  
10              
11             sub init {
12 9     9 0 261 my $self = shift;
13              
14 9 50       37 croak "'inref' must be a reference" unless ref $self->{+INREF};
15              
16 9         37 $self->SUPER::init();
17             }
18              
19 3     3 1 1829 sub operator { 'JSON' }
20              
21 3     3 1 85 sub name { '' . $_[0]->{+INREF} }
22              
23             sub verify {
24 9     9 1 4336 my $self = shift;
25 9         39 my %params = @_;
26 9         27 my ($got, $exists) = @params{qw/got exists/};
27              
28 9 50       25 return 0 unless $exists;
29              
30 9         43 eval {
31 9         217 $self->{+JSON}->decode($got);
32             };
33              
34 9 100       52 return $@ ? 0 : 1;
35             }
36              
37             sub deltas {
38 8     8 1 55 my $self = shift;
39 8         31 my %params = @_;
40 8         25 my ($got, $convert, $seen) = @params{qw/got convert seen/};
41              
42 8         47 my $check = $convert->($self->{+INREF});
43              
44             return $check->run(
45             id => [META => 'JSON'],
46             convert => $convert,
47             seen => $seen,
48 8         622 got => $self->{+JSON}->decode($got),
49             exists => 1,
50             );
51             }
52              
53             1;