Branch Coverage

blib/lib/JSON/Validator.pm
Criterion Covered Total %
branch 344 376 91.4


line true false branch
61 4 11 $args->{'schema'} ? :
64 3 12 if ($args->{'replace'}) { }
69 3 12 if $from_type eq 'HASH' and $tied = tied %$from
70 9 6 $from_type eq 'HASH' ? :
0 15 $from_type eq 'ARRAY' ? :
71 9 6 if $from_type
81 145 35 unless ($tied)
82 54 91 $from_type eq 'HASH' ? :
0 145 $from_type eq 'ARRAY' ? :
83 54 91 if $from_type
89 8 27 if not $args->{'schema'} and $tied->fqn =~ /^\Q$self->{'root_schema_url'}\E\#/
92 27 0 unless ($self->{'bundled_refs'}{$tied->fqn}++)
105 0 15 if $args->{'ref_key'}
111 0 132 if (ref $from eq 'ARRAY') { }
132 0 elsif (ref $from eq 'HASH') { }
128 5 14 unless defined(my $what = shift())
130 1 13 if ($what eq '1')
138 10 4 unless ref $what
148 50 2 unless @_
156 267 3 if not $self->{'version'} and $schema =~ /draft-0+(\w+)/
159 1 264 if @errors
167 3 578 if defined $self->{'coerce'}
173 919 637 unless @_
183 0 930 unless defined $schema
227 4 23 if ($ref->fqn =~ m[#/$prefix/([^/]+)$])
230 3 0 if ($self->{'bundled_refs'}{$ref->fqn} or not $node or not $node->{$key} or data_checksum($ref->schema) eq data_checksum($node->{$key}))
242 23 0 if (-e $spec_path)
255 7814 64 $_[0]->version < 7 ? :
260 289 39 if ($url =~ m[^https?://])
266 18 21 if ($url =~ m[^data://([^/]*)/(.*)])
272 0 21 if ($url =~ /^\s*[\[\{]/)
281 20 1 if (-e $file) { }
0 1 elsif ($url =~ m[^/] and $self->ua->server->app) { }
300 327 0 if $$text =~ /^\s*\{/s
303 0 0 unless &YAML_SUPPORT()
319 13 275 unless -r $path
326 2 15 if $err
328 0 11 if ($cache_path and $cache_path ne $BUNDLED_CACHE_DIR || $ENV{'JSON_VALIDATOR_CACHE_ANYWAYS'} and -w $cache_path)
335 0 0 unless $ENV{'HARNESS_ACTIVE'}
347 85 54 if $create
348 18 121 unless $node = $$node{$path->[$n]}
349 90 31 if ++$n + $offset >= @$path
361 0 1456 if @guard > 100
364 15 1441 if is_type($schema, 'BOOL')
384 911 6965 unless $self->{'level'}
386 586 7290 if (ref $schema eq 'HASH') { }
6954 336 elsif ($resolved = $self->{'schemas'}{$schema // ''}) { }
8 328 elsif (is_type($schema, 'BOOL')) { }
388 0 586 if $resolved = $self->{'schemas'}{$id}
399 277 47 if $schema->{$id_key}
402 887 23 unless ($self->{'level'})
404 303 584 if ($rid)
405 1 302 if $rid =~ /\#./
407 2 11 unless $rid =~ /^\w+:/ or -e $rid or $rid =~ m[^/]
421 20 887 is_type($id, 'Mojo::File') ? :
425 2772 37077 if (is_type($topic, 'ARRAY')) { }
20585 16492 elsif (is_type($topic, 'HASH')) { }
430 0 20585 if $seen{$seen_addr}++
433 6882 13703 if $topic->{'$ref'} and not ref $topic->{'$ref'}
435 288 13415 if ($topic->{$id_key} and not ref $topic->{$id_key})
437 11 277 unless $fqn->is_abs
454 129 6836 if $location_as_url->is_abs
457 22 6814 if (is_type($base, 'Mojo::File'))
458 7 15 unless length $location
467 1 6881 if tied %$topic
473 11 13831 if is_type($other, 'BOOL')
476 0 13831 if @guard > 100
478 6866 6965 if not $ref or ref $ref
479 0 6965 $ref =~ m[^/] ? :
482 2472 4493 if length $location and not length $pointer
483 4493 2472 if defined $pointer
487 4472 21 if (defined $pointer and length $pointer and $pointer =~ m[^/])
489 1 4471 unless defined $other
502 819 4073 if ref $schema eq 'HASH' and $schema->{'$ref'}
503 54 20 $schema ? :
74 4883 if is_type($schema, 'BOOL')
506 2370 2513 ref $data ? :
509 293 4590 if ($self->{'seen'}{$seen_addr})
514 4 4586 &blessed($data) && $data->can('TO_JSON') ? :
516 4 4586 if $to_json
520 97 4493 if (ref $type eq 'ARRAY') { }
2823 1670 elsif ($type) { }
524 0 97 $to_json ? :
528 4 2819 $to_json ? :
529 541 2282 if @errors
532 32 4017 if (exists $schema->{'const'})
533 0 32 $to_json ? :
535 12 20 if @errors
538 505 3532 if ($schema->{'enum'})
539 0 505 $to_json ? :
541 22 483 if @errors
544 11 4004 if (my $rules = $schema->{'not'})
545 0 11 $to_json ? :
546 5 6 @errors ? :
549 111 3893 if (my $rules = $schema->{'allOf'})
550 0 111 $to_json ? :
554 569 3435 if (my $rules = $schema->{'anyOf'})
555 0 569 $to_json ? :
559 32 3972 if (my $rules = $schema->{'oneOf'})
560 0 32 $to_json ? :
564 7 3997 if ($schema->{'if'})
568 3 4 $self->_validate($data, $path, $schema->{'if'}) ? :
582 196 19 unless my(@e) = $self->_validate($_[1], $path, $rule)
584 18 1 if $schema_type
585 17 2 if not $schema_type or $schema_type eq $type
591 1 110 if not @errors and @expected
593 14 96 if @errors
605 650 131 unless @e
607 28 103 if not $schema_type or $schema_type eq $type
615 7 9 unless @errors
626 30 37 unless my(@e) = $self->_validate($_[1], $path, $rule)
628 18 19 if not $schema_type or $schema_type eq $type
635 20 12 if @passed == 1
636 3 9 unless @errors + @expected
637 2 7 if @passed
638 6 1 if @errors
647 4 376 if (is_type($cmp_with, 'BOOL')) { }
2 374 elsif (is_type($cmp_with, 'NUM')) { }
650 2 2 unless $value < $schema->{'maximum'}
653 1 1 unless $value < $cmp_with
657 32 348 if (exists $schema->{'maximum'})
659 6 26 unless $value <= $cmp_with
671 12 368 if (is_type($cmp_with, 'BOOL')) { }
2 366 elsif (is_type($cmp_with, 'NUM')) { }
674 2 10 unless $value > $schema->{'minimum'}
677 1 1 unless $value > $cmp_with
681 158 222 if (exists $schema->{'minimum'})
683 13 145 unless $value >= $cmp_with
696 502 1477 if $m eq data_checksum($i)
700 12 100 !defined($_) || ref $_ ? :
708 31 20 if data_checksum($data) eq data_checksum($const)
715 1 232 unless $code
717 195 37 unless my $err = &$code($value)
727 34 237 if (ref $data ne 'ARRAY')
730 4 233 if (defined $schema->{'minItems'} and $schema->{'minItems'} > @$data)
734 4 233 if (defined $schema->{'maxItems'} and $schema->{'maxItems'} < @$data)
738 93 144 if ($schema->{'uniqueItems'})
741 170 7 unless $uniq{data_checksum($_)}++
747 2 235 if ($schema->{'contains'}) { }
17 218 elsif (ref $schema->{'items'} eq 'ARRAY') { }
159 59 elsif (exists $schema->{'items'}) { }
751 3 1 if @tmp
753 1 1 if @e >= @$data
759 14 3 if ($additional_items)
763 13 4 if (@rules == @$data) { }
2 2 elsif (not $additional_items) { }
784 65 81 if is_type($value, 'BOOL')
787 27 3 if (defined $value and $self->{'coerce'}{'booleans'} and B::svref_2object(\$value)->FLAGS & 12288 || $value =~ /^(true|false)$/)
794 24 3 $value ? :
805 45 209 if @errors
806 203 6 if $value =~ /^-?\d+$/
813 6 8 unless defined $value
823 17 415 if (not defined $value or ref $value)
826 85 330 unless (is_type($value, 'NUM'))
829 35 50 unless $self->{'coerce'}{'numbers'} and $value =~ /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/
834 0 380 if $schema->{'format'}
839 10 370 if $d and ($value / $d) =~ /\.[^0]+$/
848 44 1356 if (ref $data ne 'HASH')
854 2 1354 if (defined $schema->{'maxProperties'} and $schema->{'maxProperties'} < @dkeys)
858 3 1353 if (defined $schema->{'minProperties'} and $schema->{'minProperties'} > @dkeys)
862 3 1353 if (my $n_schema = $schema->{'propertyNames'})
864 3 1 unless my(@e) = $self->_validate($name, $path, $n_schema)
873 18 30 if ($self->{'coerce'}{'defaults'} and ref $r eq 'HASH' and exists $r->{'default'} and not exists $data->{$k})
882 1319 37 unless $schema->{'patternProperties'}
890 179 1177 exists $schema->{'additionalProperties'} ? :
891 1344 12 if ($additional) { }
6 6 elsif (my(@k) = grep({not $rules{$_};} @dkeys)) { }
892 1 1343 unless is_type($additional, 'HASH')
900 1257 93 unless $schema->{'required'}
901 77 27 if exists $data->{$k}
908 1530 10 unless exists $data->{$k}
909 9 1 if (ref $dependencies->{$k} eq 'ARRAY') { }
1 0 elsif (ref $dependencies->{$k} eq 'HASH') { }
922 26161 2614 unless exists $data->{$k}
923 637 1948 if ref $r eq 'HASH' and $r->{'$ref'}
926 160 2454 if @e or not is_type($r, 'HASH')
929 19 2435 if $r->{'enum'}
932 3 2451 if $r->{'const'}
943 16 521 if (not defined $value or ref $value)
946 22 0 if (B::svref_2object(\$value)->FLAGS & 12288 and 0 + $value eq $value and $value * 0 == 0)
951 21 1 unless $self->{'coerce'}{'strings'}
954 233 267 if ($schema->{'format'})
957 38 462 if (defined $schema->{'maxLength'})
958 14 24 if (length $value > $schema->{'maxLength'})
963 28 472 if (defined $schema->{'minLength'})
964 4 24 if (length $value < $schema->{'minLength'})
969 35 465 if (defined $schema->{'pattern'})
971 14 21 unless $value =~ /$p/