Branch Coverage

blib/lib/JQ/Lite/Util/Transform.pm
Criterion Covered Total %
branch 690 956 72.1


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 784 unless defined $item
702 4 780 if ($step =~ /^\[(\d+)\]$/) { }
2 778 elsif ($step eq '[]') { }
19 759 elsif ($step =~ /^(.*?)\[(\d+)\]$/) { }
51 708 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 677 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 4 62 if ($cond =~ m[^\s*(\.\w+)\s*([\+\-\*/%])\s*(-?\d+(?:\.\d+)?)\s*(==|!=|>=|<=|>|<)\s*(-?\d+(?:\.\d+)?)\s*$])
784 0 4 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
925 36 14 if ($num_a and $num_b) { }
936 0 6 unless ref $array_ref eq "ARRAY"
937 0 6 unless @$array_ref
944 3 17 unless defined $candidate
946 5 12 unless (defined $best_item)
952 5 7 if ($mode eq "max" and $comparison > 0 or $mode eq "min" and $comparison < 0)
958 5 1 defined $best_item ? :
964 8 12 $use_entire_item ? :
965 3 17 unless @values
974 0 17 unless defined $value
976 0 17 if (JSON::PP::is_bool($value))
977 0 0 $value ? :
980 17 0 unless (ref $value)
984 0 0 if (ref $value eq "HASH" or ref $value eq "ARRAY")
994 0 25 unless defined $raw_path
1000 19 6 unless $use_entire_item
1008 4 15 $use_entire_item ? :
1014 0 19 unless defined $value
1016 3 16 if (JSON::PP::is_bool($value))
1017 2 1 $value ? :
1021 0 16 if ref $value
1022 4 12 unless &looks_like_number($value)
1038 6 75 if (ref $val eq 'HASH') { }
6 69 elsif (ref $val eq 'ARRAY') { }
1049 1 4 unless ref $array_ref eq "ARRAY"
1057 0 12 if ($use_entire_item) { }
1061 12 0 @values ? :
1064 10 2 defined $key_value ? :
1075 4 8 if $order == 0
1082 8 4 if (not defined $current_signature or $entry->{'signature'} ne $current_signature)
1095 0 8 unless ref $value eq "ARRAY"
1099 6 11 if (ref $item eq 'ARRAY') { }
1101 6 0 if (ref $flattened eq 'ARRAY') { }
1117 0 22 unless ref $value eq "ARRAY"
1118 14 8 if $depth <= 0
1122 15 7 if (ref $item eq 'ARRAY') { }
1124 15 0 if (ref $flattened eq 'ARRAY') { }
1140 6 31 if (ref $value eq "ARRAY")
1144 2 29 unless _is_string_scalar($needle)
1152 1 28 unless defined $value
1153 1 27 if ref $value
1154 3 24 unless _is_string_scalar($value)
1159 11 13 if ($mode eq "start")
1160 6 5 if $len == 0 or index($value, $needle) == 0
1164 13 0 if ($mode eq "end")
1165 4 9 if $len == 0
1166 0 9 if length $value < $len
1167 4 5 if substr($value, -$len) eq $needle
1178 3 13 if ($error)
1190 3 7 if ($error)
1201 6 20 if (ref $value eq "ARRAY")
1205 1 19 unless defined $value
1207 2 17 if (JSON::PP::is_bool($value))
1208 1 1 $value ? :
1211 1 18 if ref $value
1213 10 8 $value =~ /$regex/ ? :
1219 0 7 if (ref $value eq "ARRAY")
1223 0 7 unless defined $value
1225 0 7 if (JSON::PP::is_bool($value))
1226 0 0 $value ? :
1229 0 7 if ref $value
1232 3 4 unless $text =~ /$regex/
1241 2 0 if (defined $-[$index] and $-[$index] >= 0) { }
1270 0 44 unless defined $pattern
1271 0 44 unless defined $flags
1276 2 10 unless $allowed{$flag}
1277 0 10 if index($modifiers, $flag) != -1
1285 6 36 if ($@)
1295 0 99 unless defined $raw
1298 99 0 unless ($@)
1299 0 99 unless defined $parsed
1312 0 28 unless defined $raw
1315 28 0 unless $@
1326 2 1 if (ref $value eq "ARRAY")
1337 2 1 if (ref $value eq "ARRAY")
1350 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') { }
1354 0 0 $value ? :
1374 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') { }
1378 0 0 $value ? :
1381 1 6 unless _is_string_scalar($value)
1394 2 4 if length($text) % 4 != 0
1397 1 3 unless $text =~ m[^[A-Za-z0-9+/]*={0,2}$]
1400 0 3 if $text =~ /=/ and not $text =~ /=+$/
1406 0 3 if $reencoded ne $text
1417 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') { }
1421 0 0 $value ? :
1433 3 5 &is_utf8($text, 1) ? :
1443 0 7 unless defined $value
1445 0 7 if (JSON::PP::is_bool($value))
1446 0 0 $value ? :
1449 0 7 if (ref $value eq "ARRAY" or ref $value eq "HASH")
1454 0 7 if (ref $value)
1459 1 6 if (_is_unquoted_csv_number($value))
1470 0 7 unless defined $value
1472 1 6 if (JSON::PP::is_bool($value))
1473 1 0 $value ? :
1476 1 5 if (ref $value eq "ARRAY" or ref $value eq "HASH")
1481 0 5 if (ref $value)
1493 0 6 unless defined $text
1501 0 6 unless defined $text
1512 0 7 unless defined $value
1513 0 7 if ref $value
1518 1 6 $flags & 12288 ? :
1524 4 25 if (ref $value eq "ARRAY")
1528 5 6 if (JSON::PP::is_bool($element))
1529 3 2 $element ? :
1531 5 0 ref $result eq 'ARRAY' ? :
1536 4 2 ref $result eq 'ARRAY' ? :
1542 3 22 unless defined $value
1543 1 21 if (JSON::PP::is_bool($value)) { }
1 20 elsif (ref $value) { }
1544 1 0 $value ? :
1550 0 21 unless defined $separator
1552 3 18 if ($separator eq "")
1564 2 11 if (ref $value eq "ARRAY")
1568 2 9 unless defined $value
1570 1 8 if (JSON::PP::is_bool($value))
1571 1 0 $value ? :
1574 2 7 if ref $value
1583 1 9 unless defined $value
1585 8 1 if (ref $value eq "ARRAY")
1588 2 6 if ($has_nested)
1594 0 18 unless defined $code
1595 0 18 unless &looks_like_number($code)
1607 2 14 if (ref $value eq "ARRAY")
1611 1 13 unless defined $value
1612 3 10 if (JSON::PP::is_bool($value)) { }
0 10 elsif (ref $value) { }
1613 2 1 $value ? :
1620 1 12 if (defined $start and not &looks_like_number($start))
1623 1 11 unless defined $start
1626 8 4 if (defined $length)
1627 1 7 unless (&looks_like_number($length))
1640 0 9 unless defined $value
1642 8 1 if (ref $value eq "ARRAY")
1646 0 8 if $size == 0
1648 8 0 @args ? :
1651 1 7 if (defined $raw_start and not &looks_like_number($raw_start))
1655 7 0 if (defined $raw_start and &looks_like_number($raw_start))
1659 2 5 if $start < 0
1660 1 6 if $start < 0
1661 1 6 if $start >= $size
1664 1 4 if (@args > 1 and defined $args[1] and not &looks_like_number($args[1]))
1668 4 0 if (@args > 1 and defined $args[1] and &looks_like_number($args[1]))
1673 4 1 if (defined $length) { }
1674 1 3 if $length <= 0
1681 0 4 if $end > $size
1683 0 4 if $end <= $start
1694 2 15 if (ref $value eq "ARRAY")
1698 1 14 unless defined $value
1699 1 13 if ref $value
1701 2 11 if &looks_like_number($value)
1703 11 0 defined $search ? :
1704 11 0 defined $replacement ? :
1706 1 10 if $search eq ""
1716 0 5 unless @$keys
1718 3 2 if (ref $value eq "HASH")
1721 0 6 unless defined $key
1722 1 5 unless exists $value->{$key}
1728 1 1 if (ref $value eq "ARRAY")
1738 0 118 unless defined $raw
1741 118 0 if (not $@ and ref $parsed eq "ARRAY")
1766 1 457 if ($escape)
1772 1 456 if ($char eq "\\" and $in_double)
1778 110 346 if ($char eq "\"" and not $in_single)
1784 0 346 if ($char eq "'" and not $in_double)
1790 113 233 unless ($in_single or $in_double)
1791 10 103 if ($char =~ /[\[\{\(]/) { }
10 93 elsif ($char =~ /[\]\}\)]/ and $depth > 0) { }
19 148 elsif ($char eq ';' and $depth == 0) { }
1800 19 0 length $segment ? :
1811 37 0 length $final ? :
1813 37 0 if (defined $expected)
1815 18 19 if ($expected > @segments)
1826 0 9 unless defined $raw
1829 0 9 if $raw eq ""
1838 0 61 if ($escape)
1844 0 61 if ($char eq "\\" and $in_double)
1850 6 55 if ($char eq "\"" and not $in_single)
1856 0 55 if ($char eq "'" and not $in_double)
1862 11 0 if ($char eq ";" and not $in_single and not $in_double)
1875 0 20 unless defined $segment
1878 0 20 if $clean eq ""
1881 20 0 @values ? :
1899 0 9 unless @args
1901 0 9 if @args > 3
1905 2 7 if (@args == 1) { }
3 4 elsif (@args == 2) { }
1921 3 6 unless defined $start and defined $end
1922 2 4 unless defined $step
1923 0 4 if $step == 0
1925 3 1 if ($step > 0)
1926 0 3 if $start >= $end
1935 0 1 if $start <= $end
1948 0 20 unless defined $value
1949 2 18 if ref $value
1950 3 15 if _is_string_scalar($value)
1952 15 0 &looks_like_number($value) ? :
1958 11 6 _deep_contains($value, $needle, 'legacy') ? :
1964 6 5 _deep_contains($value, $needle, 'subset') ? :
1976 6 3 if (ref $value eq "ARRAY")
1979 10 13 if _values_equal($value->[$i], $needle)
1984 0 3 unless defined $value
1986 3 0 if (not ref $value or JSON::PP::is_bool($value))
1987 1 2 unless defined $needle
1993 1 1 if ($fragment eq '') { }
2000 1 2 if $pos == -1
2014 0 7 unless defined $needle
2016 2 5 if (ref $value eq "HASH")
2017 1 1 exists $value->{$needle} ? :
2020 5 0 if (ref $value eq "ARRAY")
2021 0 5 if ref $needle
2025 2 3 unless $flags & 12288
2028 2 1 $index >= 0 && $index < @$value ? :
2039 2 0 unless defined $left or defined $right
2040 2 58 unless defined $left and defined $right
2042 6 52 if (JSON::PP::is_bool($left) and JSON::PP::is_bool($right))
2046 44 0 unless (ref $left or ref $right)
2047 11 33 if (&looks_like_number($left) and &looks_like_number($right))
2053 0 8 if (ref $left eq "ARRAY" and ref $right eq "ARRAY")
2054 0 0 if @$left != @$right
2056 0 0 unless _values_equal($left->[$i], $right->[$i])
2061 8 0 if (ref $left eq "HASH" and ref $right eq "HASH")
2062 1 7 if keys %$left != keys %$right
2064 2 7 unless exists $right->{$key} and _values_equal($left->{$key}, $right->{$key})
2077 2 2 unless defined $value or defined $needle
2078 2 59 unless defined $value
2080 14 45 if (ref $value eq "ARRAY")
2084 13 32 if (ref $value eq "HASH")
2094 8 6 if ($mode eq "subset" and ref $needle eq "ARRAY")
2098 3 26 if $used[$i]
2099 9 17 if (_deep_contains($haystack->[$i], $expected, $mode))
2110 4 7 if _values_equal($item, $needle)
2119 12 1 if (ref $needle eq "HASH")
2121 0 13 unless exists $value->{$key}
2123 4 9 if ($mode eq 'legacy') { }
2124 1 3 unless _values_equal($value->{$key}, $needle->{$key})
2127 5 4 unless _deep_contains($value->{$key}, $needle->{$key}, $mode)
2133 1 0 exists $value->{$needle} ? :
2139 0 32 unless defined $value
2140 2 30 unless defined $needle
2142 30 0 if (not ref $value or JSON::PP::is_bool($value))
2145 12 18 index($haystack, $fragment) != -1 ? :
2154 3 6 if int $number == $number
2155 3 3 $number > 0 ? :
2161 3 7 if int $number == $number
2162 4 3 $number > 0 ? :
2168 4 10 if int $number == $number
2169 5 5 $number >= 0 ? :
2174 0 4 unless ref $array_ref eq "ARRAY"
2181 3 15 if ($use_entire_item) { }
2186 10 5 @values ? :
2189 13 5 defined $key_value ? :