Branch Coverage

blib/lib/JQ/Lite/Util/Transform.pm
Criterion Covered Total %
branch 702 982 71.4


line true false branch
18 1 6 unless (defined $value)
22 1 5 if (JSON::PP::is_bool($value))
23 0 1 $value ? :
26 3 2 unless (ref $value)
30 2 0 if (ref $value eq "ARRAY" or ref $value eq "HASH")
46 1 14 unless defined $value
48 3 11 if (ref $value eq "ARRAY")
52 0 11 if ref $value
57 1 10 $@ ? :
63 3 48 unless defined $value
65 9 39 if (JSON::PP::is_bool($value))
66 6 3 $value ? :
70 27 12 unless (ref $value)
71 24 3 &looks_like_number($value) ? :
74 12 0 if (ref $value eq "ARRAY")
84 1 19 unless defined $value
86 1 18 if (JSON::PP::is_bool($value))
87 1 0 $value ? :
91 14 4 unless (ref $value)
95 4 0 if (ref $value eq "ARRAY")
105 1 18 unless defined $value
107 0 18 if (JSON::PP::is_bool($value))
108 0 0 $value ? :
111 18 0 &looks_like_number($value) ? :
117 1 14 unless &looks_like_number($value)
120 3 11 if defined $min and $numeric < $min
121 4 10 if defined $max and $numeric > $max
129 1 15 unless defined $value
131 2 13 if (JSON::PP::is_bool($value))
132 1 1 $value ? :
135 7 6 unless (ref $value)
136 4 3 &looks_like_number($value) ? :
139 4 2 if (ref $value eq "ARRAY")
149 0 34 unless ref $values eq "ARRAY"
152 3 1 $_ ? :
4 92 JSON::PP::is_bool($_) ? :
154 118 5 if defined $_
161 0 16 unless defined $value
163 0 16 if (JSON::PP::is_bool($value))
164 0 0 $value ? :
167 0 16 if ref $value
168 1 15 unless &looks_like_number($value)
172 1 14 if $fraction != $fraction
173 2 12 if $fraction * 0 != $fraction * 0
175 9 3 if ($fraction > 1)
176 8 1 if $fraction <= 100
179 1 11 if $fraction < 0
180 1 11 if $fraction > 1
188 0 12 unless ref $numbers eq "ARRAY"
189 0 12 unless @$numbers
191 0 12 if $fraction < 0
192 0 12 if $fraction > 1
194 1 11 if @$numbers == 1
198 2 9 $lower_index == @$numbers - 1 ? :
201 2 9 if $upper_index == $lower_index
212 2 1 if (ref $value eq "ARRAY")
217 5 3 unless ref $element eq "HASH"
222 1 1 $saw_object ? :
225 1 0 if (ref $value eq "HASH")
235 2 2 if (ref $value eq "HASH")
239 2 0 if (ref $value eq "ARRAY")
249 0 211 unless defined $value
250 0 211 if ref $value
255 118 93 $flags & 16384 ? :
261 1 10 unless ref $value eq "ARRAY"
269 11 4 if (ref $entry eq 'HASH') { }
3 1 elsif (ref $entry eq 'ARRAY') { }
270 0 11 unless exists $entry->{'key'}
271 1 10 unless exists $entry->{'value'}
275 0 3 if @$entry < 2
282 1 12 if (not defined $key or ref $key)
288 0 12 unless _is_string_scalar($key)
292 6 6 if ($key =~ /^(?:0|[1-9]\d*)$/) { }
300 3 4 if (@numeric_keys and not $saw_non_numeric_key)
304 0 5 if $seen{$index}++
305 5 0 if $index > $max_index
308 2 1 if ($max_index + 1 == scalar keys %result and $max_index + 1 == scalar @numeric_keys)
320 0 1 unless ref $value eq "HASH" or ref $value eq "ARRAY"
323 0 1 unless ref $entries eq "ARRAY"
330 1 0 if $normalized
340 0 8 unless defined $value
342 5 3 if (ref $value eq "HASH")
347 3 5 unless @outputs
353 3 0 if (ref $value eq "ARRAY")
356 2 6 if (ref $original eq "HASH" or ref $original eq "ARRAY")
362 3 3 if @outputs
373 2 11 if (ref $value eq 'HASH') { }
3 8 elsif (ref $value eq 'ARRAY') { }
386 13 0 @results ? :
399 0 9 unless defined $current
402 4 5 if (defined $filter) { }
1 4 elsif (ref $current eq 'ARRAY') { }
1 3 elsif (ref $current eq 'HASH') { }
413 5 4 unless @children
426 0 10 unless defined $value
427 0 10 if not ref $value or JSON::PP::is_bool($value)
431 0 10 if $filter eq ""
435 10 0 if (not $@ and defined $decoded_paths)
436 9 1 if (ref $decoded_paths eq 'ARRAY') { }
437 2 7 if (grep {ref $_ ne "ARRAY";} @$decoded_paths)
448 0 5 unless (@paths)
451 0 0 unless defined $output
453 0 0 if (ref $output eq 'ARRAY') { }
454 0 0 if (grep {ref $_ ne "ARRAY";} @$output)
466 0 5 unless @paths
468 8 0 if ref $_ eq "ARRAY"
1 4 if (grep {not @$_ if ref $_ eq "ARRAY";} @paths)
476 0 7 unless ref $path eq "ARRAY"
477 0 7 unless @$path
489 1 2 if $depth_cmp
492 0 2 if $prefix_cmp
501 4 0 if not $path or @$path < 2
510 0 0 unless defined $segment
512 0 0 if (JSON::PP::is_bool($segment))
513 0 0 $segment ? :
516 0 0 ref $segment ? :
522 2 0 if (_is_numeric_segment($left) and _is_numeric_segment($right))
532 4 0 if (JSON::PP::is_bool($segment))
533 2 2 $segment ? :
542 0 15 unless defined $value
543 10 5 if not ref $value or JSON::PP::is_bool($value)
552 0 7 unless ref $value eq "HASH" or ref $value eq "ARRAY"
553 0 7 unless ref $path eq "ARRAY"
554 0 7 unless @$path
561 1 0 if (ref $cursor eq "HASH")
563 0 1 unless defined $key
564 0 1 unless exists $cursor->{$key}
569 0 0 if (ref $cursor eq "ARRAY")
571 0 0 unless defined $index
579 3 4 if (ref $cursor eq "HASH")
581 0 3 unless defined $key
586 4 0 if (ref $cursor eq "ARRAY")
588 0 4 unless defined $index
596 0 4 unless defined $value
598 2 2 if (JSON::PP::is_bool($value))
599 1 1 $value ? :
602 0 4 if ref $value
604 0 4 unless $value =~ /^-?\d+$/
607 0 4 if $index < 0
609 0 4 if $index < 0 or $index >= $length
617 1 0 if (ref $entry eq "HASH")
618 0 1 unless exists $entry->{'key'}
622 0 0 if (ref $entry eq "ARRAY")
623 0 0 unless @$entry >= 2
635 3 3 if defined $candidate
640 5 0 if defined $candidate
649 0 13 unless defined $expr
653 0 13 if $copy eq ""
660 1 12 if ($copy =~ m[^(.*?)\s*//\s*(.+)$])
666 0 12 if ($copy eq ".")
671 2 10 unless ($@)
675 0 10 if ($copy =~ /^'(.*)'$/)
681 0 10 unless defined $context
699 1 788 unless defined $item
702 4 784 if ($step =~ /^\[(\d+)\]$/) { }
2 782 elsif ($step eq '[]') { }
19 763 elsif ($step =~ /^(.*?)\[(\d+)\]$/) { }
51 712 elsif ($step =~ /^(.*?)\[\]$/) { }
704 4 0 if (ref $item eq "ARRAY" and defined $item->[$index])
710 2 0 if (ref $item eq 'ARRAY') { }
0 0 elsif (ref $item eq 'HASH') { }
720 19 0 if (ref $item eq "HASH" and exists $item->{$key})
722 19 0 if ref $val eq "ARRAY" and defined $val->[$index]
729 49 2 if (ref $item eq 'HASH' and exists $item->{$key}) { }
0 2 elsif (ref $item eq 'ARRAY') { }
731 48 1 if (ref $val eq 'ARRAY') { }
1 0 elsif (ref $val eq 'HASH') { }
740 0 0 if (ref $sub eq "HASH" and exists $sub->{$key})
742 0 0 if (ref $val eq 'ARRAY') { }
0 0 elsif (ref $val eq 'HASH') { }
754 681 31 if (ref $item eq 'HASH' and exists $item->{$step}) { }
0 31 elsif (ref $item eq 'ARRAY') { }
759 0 0 if (ref $sub eq "HASH" and exists $sub->{$step})
769 24 10 unless @stack or $optional
779 8 62 if ($cond =~ m[^\s*(\.\w+)\s*([\+\-\*/%])\s*(-?\d+(?:\.\d+)?)\s*(==|!=|>=|<=|>|<)\s*(-?\d+(?:\.\d+)?)\s*$])
784 0 8 unless defined $lhs and $lhs =~ /^-?\d+(?:\.\d+)?$/
791 0 62 if ($cond =~ /\s+and\s+/i)
794 0 0 unless _evaluate_condition($item, $c)
798 0 62 if ($cond =~ /\s+or\s+/i)
801 0 0 if _evaluate_condition($item, $c)
807 3 59 if ($cond =~ /^\s*\.(.+?)\s+contains\s+"(.*?)"\s*$/)
812 2 1 if (ref $val eq 'ARRAY') { }
1 0 elsif (not ref $val and index($val, $want) != -1) { }
813 1 1 if grep {$_ eq $want;} @$val
823 2 57 if ($cond =~ /^\s*\.(.+?)\s+has\s+"(.*?)"\s*$/)
828 1 1 if (ref $val eq "HASH" and exists $val->{$key})
836 16 41 if ($cond =~ /^\s*\.(.+?)\s+match\s+"(.*?)"(i?)\s*$/)
839 1 15 if ($error)
846 0 15 if ref $val
847 3 12 if $val =~ /$re/
853 2 39 if ($cond =~ /^\s*\.(.+?)\s*=~\s*"(.*?)"(i?)\s*$/)
856 1 1 if ($error)
863 0 0 if ref $val
864 0 0 if $val =~ /$re/
871 34 5 if ($cond =~ /^\s*\.(.+?)\s*(==|!=|>=|<=|>|<)\s*(.+?)\s*$/)
875 2 32 if ($value_raw =~ /^"(.*)"$/) { }
0 32 elsif ($value_raw eq 'true') { }
0 32 elsif ($value_raw eq 'false') { }
29 3 elsif ($value_raw =~ /^-?\d+(?:\.\d+)?$/) { }
888 3 31 unless @values
891 0 31 unless defined $field_val
896 0 31 if ($op eq '==') { }
2 29 elsif ($op eq '!=') { }
29 0 elsif ($is_number) { }
897 0 0 $is_number ? :
0 0 if $is_number ? $field_val == $value : $field_val eq $value
899 0 2 $is_number ? :
1 1 if $is_number ? $field_val != $value : $field_val ne $value
902 22 7 if ($op eq '>') { }
7 0 elsif ($op eq '>=') { }
0 0 elsif ($op eq '<') { }
0 0 elsif ($op eq '<=') { }
903 8 14 if $field_val > $value
905 5 2 if $field_val >= $value
907 0 0 if $field_val < $value
909 0 0 if $field_val <= $value
921 4 4 if $operator eq "+"
922 0 4 if $operator eq "-"
923 0 4 if $operator eq "*"
924 4 0 if $operator eq '/' || $operator eq '%' and $rhs == 0
925 0 0 if $operator eq "/"
926 0 0 if $operator eq "%"
934 4 4 unless defined $lhs and defined $rhs
936 0 4 if $operator eq "=="
937 0 4 if $operator eq "!="
938 0 4 if $operator eq ">="
939 0 4 if $operator eq "<="
940 4 0 if $operator eq ">"
941 0 0 if $operator eq "<"
953 36 14 if ($num_a and $num_b) { }
964 0 6 unless ref $array_ref eq "ARRAY"
965 0 6 unless @$array_ref
972 3 17 unless defined $candidate
974 5 12 unless (defined $best_item)
980 5 7 if ($mode eq "max" and $comparison > 0 or $mode eq "min" and $comparison < 0)
986 5 1 defined $best_item ? :
992 8 12 $use_entire_item ? :
993 3 17 unless @values
1002 0 17 unless defined $value
1004 0 17 if (JSON::PP::is_bool($value))
1005 0 0 $value ? :
1008 17 0 unless (ref $value)
1012 0 0 if (ref $value eq "HASH" or ref $value eq "ARRAY")
1022 0 25 unless defined $raw_path
1028 19 6 unless $use_entire_item
1036 4 15 $use_entire_item ? :
1042 0 19 unless defined $value
1044 3 16 if (JSON::PP::is_bool($value))
1045 2 1 $value ? :
1049 0 16 if ref $value
1050 4 12 unless &looks_like_number($value)
1066 6 75 if (ref $val eq 'HASH') { }
6 69 elsif (ref $val eq 'ARRAY') { }
1077 1 4 unless ref $array_ref eq "ARRAY"
1085 0 12 if ($use_entire_item) { }
1089 12 0 @values ? :
1092 10 2 defined $key_value ? :
1103 4 8 if $order == 0
1110 8 4 if (not defined $current_signature or $entry->{'signature'} ne $current_signature)
1123 0 8 unless ref $value eq "ARRAY"
1127 6 11 if (ref $item eq 'ARRAY') { }
1129 6 0 if (ref $flattened eq 'ARRAY') { }
1145 0 22 unless ref $value eq "ARRAY"
1146 14 8 if $depth <= 0
1150 15 7 if (ref $item eq 'ARRAY') { }
1152 15 0 if (ref $flattened eq 'ARRAY') { }
1168 6 31 if (ref $value eq "ARRAY")
1172 2 29 unless _is_string_scalar($needle)
1180 1 28 unless defined $value
1181 1 27 if ref $value
1182 3 24 unless _is_string_scalar($value)
1187 11 13 if ($mode eq "start")
1188 6 5 if $len == 0 or index($value, $needle) == 0
1192 13 0 if ($mode eq "end")
1193 4 9 if $len == 0
1194 0 9 if length $value < $len
1195 4 5 if substr($value, -$len) eq $needle
1206 3 13 if ($error)
1218 3 7 if ($error)
1229 6 20 if (ref $value eq "ARRAY")
1233 1 19 unless defined $value
1235 2 17 if (JSON::PP::is_bool($value))
1236 1 1 $value ? :
1239 1 18 if ref $value
1241 10 8 $value =~ /$regex/ ? :
1247 0 7 if (ref $value eq "ARRAY")
1251 0 7 unless defined $value
1253 0 7 if (JSON::PP::is_bool($value))
1254 0 0 $value ? :
1257 0 7 if ref $value
1260 3 4 unless $text =~ /$regex/
1269 2 0 if (defined $-[$index] and $-[$index] >= 0) { }
1298 0 44 unless defined $pattern
1299 0 44 unless defined $flags
1304 2 10 unless $allowed{$flag}
1305 0 10 if index($modifiers, $flag) != -1
1313 6 36 if ($@)
1323 0 99 unless defined $raw
1326 99 0 unless ($@)
1327 0 99 unless defined $parsed
1340 0 28 unless defined $raw
1343 28 0 unless $@
1354 2 1 if (ref $value eq "ARRAY")
1365 2 1 if (ref $value eq "ARRAY")
1378 1 5 if (not defined $value) { }
0 5 elsif (JSON::PP::is_bool($value)) { }
2 3 elsif (not ref $value) { }
3 0 elsif (ref $value eq 'ARRAY' or ref $value eq 'HASH') { }
1382 0 0 $value ? :
1402 0 7 if (not defined $value) { }
0 7 elsif (JSON::PP::is_bool($value)) { }
7 0 elsif (not ref $value) { }
0 0 elsif (ref $value eq 'ARRAY' or ref $value eq 'HASH') { }
1406 0 0 $value ? :
1409 1 6 unless _is_string_scalar($value)
1422 2 4 if length($text) % 4 != 0
1425 1 3 unless $text =~ m[^[A-Za-z0-9+/]*={0,2}$]
1428 0 3 if $text =~ /=/ and not $text =~ /=+$/
1434 0 3 if $reencoded ne $text
1445 1 7 if (not defined $value) { }
0 7 elsif (JSON::PP::is_bool($value)) { }
5 2 elsif (not ref $value) { }
2 0 elsif (ref $value eq 'ARRAY' or ref $value eq 'HASH') { }
1449 0 0 $value ? :
1461 3 5 &is_utf8($text, 1) ? :
1471 0 7 unless defined $value
1473 0 7 if (JSON::PP::is_bool($value))
1474 0 0 $value ? :
1477 0 7 if (ref $value eq "ARRAY" or ref $value eq "HASH")
1482 0 7 if (ref $value)
1487 1 6 if (_is_unquoted_csv_number($value))
1498 0 7 unless defined $value
1500 1 6 if (JSON::PP::is_bool($value))
1501 1 0 $value ? :
1504 1 5 if (ref $value eq "ARRAY" or ref $value eq "HASH")
1509 0 5 if (ref $value)
1521 0 6 unless defined $text
1529 0 6 unless defined $text
1540 0 7 unless defined $value
1541 0 7 if ref $value
1546 1 6 $flags & 12288 ? :
1552 4 25 if (ref $value eq "ARRAY")
1556 5 6 if (JSON::PP::is_bool($element))
1557 3 2 $element ? :
1559 5 0 ref $result eq 'ARRAY' ? :
1564 4 2 ref $result eq 'ARRAY' ? :
1570 3 22 unless defined $value
1571 1 21 if (JSON::PP::is_bool($value)) { }
1 20 elsif (ref $value) { }
1572 1 0 $value ? :
1578 0 21 unless defined $separator
1580 3 18 if ($separator eq "")
1592 2 11 if (ref $value eq "ARRAY")
1596 2 9 unless defined $value
1598 1 8 if (JSON::PP::is_bool($value))
1599 1 0 $value ? :
1602 2 7 if ref $value
1611 1 9 unless defined $value
1613 8 1 if (ref $value eq "ARRAY")
1616 2 6 if ($has_nested)
1622 0 18 unless defined $code
1623 0 18 unless &looks_like_number($code)
1635 2 14 if (ref $value eq "ARRAY")
1639 1 13 unless defined $value
1640 3 10 if (JSON::PP::is_bool($value)) { }
0 10 elsif (ref $value) { }
1641 2 1 $value ? :
1648 1 12 if (defined $start and not &looks_like_number($start))
1651 1 11 unless defined $start
1654 8 4 if (defined $length)
1655 1 7 unless (&looks_like_number($length))
1668 0 9 unless defined $value
1670 8 1 if (ref $value eq "ARRAY")
1674 0 8 if $size == 0
1676 8 0 @args ? :
1679 1 7 if (defined $raw_start and not &looks_like_number($raw_start))
1683 7 0 if (defined $raw_start and &looks_like_number($raw_start))
1687 2 5 if $start < 0
1688 1 6 if $start < 0
1689 1 6 if $start >= $size
1692 1 4 if (@args > 1 and defined $args[1] and not &looks_like_number($args[1]))
1696 4 0 if (@args > 1 and defined $args[1] and &looks_like_number($args[1]))
1701 4 1 if (defined $length) { }
1702 1 3 if $length <= 0
1709 0 4 if $end > $size
1711 0 4 if $end <= $start
1722 2 15 if (ref $value eq "ARRAY")
1726 1 14 unless defined $value
1727 1 13 if ref $value
1729 2 11 if &looks_like_number($value)
1731 11 0 defined $search ? :
1732 11 0 defined $replacement ? :
1734 1 10 if $search eq ""
1744 0 5 unless @$keys
1746 3 2 if (ref $value eq "HASH")
1749 0 6 unless defined $key
1750 1 5 unless exists $value->{$key}
1756 1 1 if (ref $value eq "ARRAY")
1766 0 118 unless defined $raw
1769 118 0 if (not $@ and ref $parsed eq "ARRAY")
1794 1 457 if ($escape)
1800 1 456 if ($char eq "\\" and $in_double)
1806 110 346 if ($char eq "\"" and not $in_single)
1812 0 346 if ($char eq "'" and not $in_double)
1818 113 233 unless ($in_single or $in_double)
1819 10 103 if ($char =~ /[\[\{\(]/) { }
10 93 elsif ($char =~ /[\]\}\)]/ and $depth > 0) { }
19 148 elsif ($char eq ';' and $depth == 0) { }
1828 19 0 length $segment ? :
1839 37 0 length $final ? :
1841 37 0 if (defined $expected)
1843 18 19 if ($expected > @segments)
1854 0 9 unless defined $raw
1857 0 9 if $raw eq ""
1866 0 61 if ($escape)
1872 0 61 if ($char eq "\\" and $in_double)
1878 6 55 if ($char eq "\"" and not $in_single)
1884 0 55 if ($char eq "'" and not $in_double)
1890 11 0 if ($char eq ";" and not $in_single and not $in_double)
1903 0 20 unless defined $segment
1906 0 20 if $clean eq ""
1909 20 0 @values ? :
1927 0 9 unless @args
1929 0 9 if @args > 3
1933 2 7 if (@args == 1) { }
3 4 elsif (@args == 2) { }
1949 3 6 unless defined $start and defined $end
1950 2 4 unless defined $step
1951 0 4 if $step == 0
1953 3 1 if ($step > 0)
1954 0 3 if $start >= $end
1963 0 1 if $start <= $end
1976 0 20 unless defined $value
1977 2 18 if ref $value
1978 3 15 if _is_string_scalar($value)
1980 15 0 &looks_like_number($value) ? :
1986 11 6 _deep_contains($value, $needle, 'legacy') ? :
1992 6 5 _deep_contains($value, $needle, 'subset') ? :
2004 6 3 if (ref $value eq "ARRAY")
2007 10 13 if _values_equal($value->[$i], $needle)
2012 0 3 unless defined $value
2014 3 0 if (not ref $value or JSON::PP::is_bool($value))
2015 1 2 unless defined $needle
2021 1 1 if ($fragment eq '') { }
2028 1 2 if $pos == -1
2042 0 7 unless defined $needle
2044 2 5 if (ref $value eq "HASH")
2045 1 1 exists $value->{$needle} ? :
2048 5 0 if (ref $value eq "ARRAY")
2049 0 5 if ref $needle
2053 2 3 unless $flags & 12288
2056 2 1 $index >= 0 && $index < @$value ? :
2067 2 0 unless defined $left or defined $right
2068 2 58 unless defined $left and defined $right
2070 6 52 if (JSON::PP::is_bool($left) and JSON::PP::is_bool($right))
2074 44 0 unless (ref $left or ref $right)
2075 11 33 if (&looks_like_number($left) and &looks_like_number($right))
2081 0 8 if (ref $left eq "ARRAY" and ref $right eq "ARRAY")
2082 0 0 if @$left != @$right
2084 0 0 unless _values_equal($left->[$i], $right->[$i])
2089 8 0 if (ref $left eq "HASH" and ref $right eq "HASH")
2090 1 7 if keys %$left != keys %$right
2092 2 7 unless exists $right->{$key} and _values_equal($left->{$key}, $right->{$key})
2105 2 2 unless defined $value or defined $needle
2106 2 59 unless defined $value
2108 14 45 if (ref $value eq "ARRAY")
2112 13 32 if (ref $value eq "HASH")
2122 8 6 if ($mode eq "subset" and ref $needle eq "ARRAY")
2126 3 26 if $used[$i]
2127 9 17 if (_deep_contains($haystack->[$i], $expected, $mode))
2138 4 7 if _values_equal($item, $needle)
2147 12 1 if (ref $needle eq "HASH")
2149 0 13 unless exists $value->{$key}
2151 4 9 if ($mode eq 'legacy') { }
2152 1 3 unless _values_equal($value->{$key}, $needle->{$key})
2155 5 4 unless _deep_contains($value->{$key}, $needle->{$key}, $mode)
2161 1 0 exists $value->{$needle} ? :
2167 0 32 unless defined $value
2168 2 30 unless defined $needle
2170 30 0 if (not ref $value or JSON::PP::is_bool($value))
2173 12 18 index($haystack, $fragment) != -1 ? :
2182 3 6 if int $number == $number
2183 3 3 $number > 0 ? :
2189 3 7 if int $number == $number
2190 4 3 $number > 0 ? :
2196 4 10 if int $number == $number
2197 5 5 $number >= 0 ? :
2202 0 4 unless ref $array_ref eq "ARRAY"
2209 3 15 if ($use_entire_item) { }
2214 10 5 @values ? :
2217 13 5 defined $key_value ? :