Branch Coverage

blib/lib/JQ/Lite/Filters.pm
Criterion Covered Total %
branch 676 806 83.8


line true false branch
20 12 1378 if (@sequence_parts > 1)
27 0 30 unless defined $segment
31 0 30 if $filter eq ""
33 25 5 unless ($filter =~ /^\s*[\[{(]/)
35 23 2 if ($ok)
36 22 1 if (@$values)
55 15 1363 if ($normalized =~ /^\$(\w+)(.*)$/s)
59 15 1 if (@values) { }
70 2 1361 if ($normalized =~ /^as\s+\$(\w+)$/)
83 14 1347 if ($normalized =~ /^try\b/)
104 18 173 if (defined $string)
105 0 18 if ($escape)
110 0 18 if ($ch eq "\\")
115 2 16 if ($ch eq $string)
122 2 171 if ($ch eq "'" or $ch eq "\"")
127 9 162 if (exists $pairs{$ch})
132 9 153 if (exists $closing{$ch})
133 0 9 unless @stack
135 0 9 unless $pairs{$open} eq $ch
139 76 77 if @stack
141 1 76 if (substr($body, $i) =~ /^try\b/)
142 0 1 if ($i > 0)
144 0 0 unless $prev =~ /[\s\(\[\{\|,]/
150 12 64 if (substr($body, $i) =~ /^catch\b/)
151 12 0 if ($i > 0)
153 1 11 unless $prev =~ /[\s\)\]\}\|,]/
156 1 10 if ($nested_try_depth > 0)
166 10 4 if (defined $catch_index)
173 14 0 if defined $catch_expr
184 7 7 unless eval { do { @outputs = $self->run_query($json, $try_expr); 1 } }
187 7 7 unless ($error)
193 7 0 if defined $message
195 6 1 if (defined $catch_expr and length $catch_expr)
196 0 6 unless $self->{'_vars'}
200 4 2 if ($catch_ok) { }
201 4 0 @$catch_values ? :
209 0 2 unless eval { do { @catch_outputs = $self->run_query($json, $catch_expr); 1 } }
212 0 2 if ($catch_error) { }
230 59 1288 if (JQ::Lite::Util::_looks_like_expression($normalized))
236 17 34 if ($ok) { }
237 17 0 if (@$values) { }
250 18 34 if ($all_ok)
257 9 1313 if ($normalized =~ /^\.\s*\+\s*(.+)$/s)
262 9 0 $rhs_ok && @$rhs_values ? :
270 12 1301 if (defined $add_lhs and defined $add_rhs)
273 10 0 $ok && @$values ? :
280 15 1286 if ($normalized =~ /^\[(.*)\]$/s)
283 14 1 if ($inner =~ /\S/)
291 0 30 unless defined $element
293 0 30 if $element eq ""
296 27 3 if ($ok)
297 25 2 if (@$values) { }
307 3 0 if (@outputs) { }
318 1 14 unless (@elements)
327 8 1278 if ($normalized =~ /^\{(.*)\}$/s)
330 7 1 if ($inner =~ /\S/)
338 0 13 unless defined $pair
341 0 13 unless defined $raw_key
344 0 13 unless defined $key
346 13 0 defined $raw_expr ? :
348 0 13 if $value_expr eq ""
353 13 0 if ($ok) { }
354 11 2 @$values ? :
359 0 0 @outputs ? :
368 1 7 unless (@pairs)
376 4 1274 if (my $foreach = JQ::Lite::Util::_parse_foreach_expression($normalized))
385 3 1 if ($init_ok) { }
386 3 0 @$init_values ? :
390 1 0 @init_outputs ? :
394 0 14 unless $self->{'_vars'}
399 14 0 if ($updated_ok) { }
400 14 0 @$updated_values ? :
404 0 0 @outputs ? :
409 4 10 if (defined $foreach->{'extract_expr'} and length $foreach->{'extract_expr'}) { }
412 4 0 if ($extract_ok) { }
413 4 0 @$extract_values ? :
417 0 0 @extracted ? :
432 9 1265 if (my $if_expr = JQ::Lite::Util::_parse_if_expression($normalized))
444 3 8 if (JQ::Lite::Util::_is_truthy($cond_value))
450 0 8 unless ($truthy or @cond_results)
451 0 0 JQ::Lite::Util::_evaluate_condition($value, $branch->{'condition'}) ? :
454 8 3 unless $truthy
458 2 1 if ($branch_ok) { }
470 3 6 if $matched
472 5 1 if (defined $if_expr->{'else'})
475 2 3 if ($else_ok) { }
489 4 1261 if (my $reduce = JQ::Lite::Util::_parse_reduce_expression($normalized))
498 3 1 if ($init_ok) { }
499 3 0 @$init_values ? :
503 1 0 @init_outputs ? :
507 0 11 unless $self->{'_vars'}
512 11 0 if ($updated_ok) { }
513 11 0 @$updated_values ? :
517 0 0 @outputs ? :
531 14 1247 if ($part eq ".[]")
533 0 0 JQ::Lite::Util::_is_string_scalar($_) ? :
1 0 ref $_ eq 'HASH' ? :
13 1 if (ref $_ eq 'ARRAY') { }
543 35 1212 if ($part =~ /^select\((.+)\)$/)
555 16 35 JQ::Lite::Util::_evaluate_condition($value, $cond) ? :
557 6 45 if ($use_streaming_eval)
568 2 4 if $error
570 4 0 if (@cond_results)
574 5 3 if (JQ::Lite::Util::_is_truthy($cond_value))
579 3 1 if ($truthy)
587 16 29 if ($simple)
597 20 1192 if ($part eq "length")
599 1 19 if (not defined $_) { }
13 6 elsif (ref $_ eq 'ARRAY') { }
2 4 elsif (ref $_ eq 'HASH') { }
4 0 elsif (not ref $_ or ref $_ eq 'JSON::PP::Boolean') { }
620 5 1187 if ($part eq "keys")
622 2 3 if (ref $_ eq 'HASH') { }
1 2 elsif (ref $_ eq 'ARRAY') { }
637 3 1184 if ($part eq "keys_unsorted" or $part eq "keys_unsorted()")
639 1 2 if (ref $_ eq 'HASH') { }
1 1 elsif (ref $_ eq 'ARRAY') { }
654 16 1168 if (JQ::Lite::Util::_looks_like_assignment($part))
666 2 1166 if ($part eq "sort")
668 2 0 if (ref $_ eq 'ARRAY') { }
675 3 1163 if ($part eq "sort_desc")
677 3 0 if (ref $_ eq 'ARRAY') { }
690 1 1162 if ($part eq "unique")
692 1 0 if (ref $_ eq 'ARRAY') { }
699 3 1159 if ($part =~ /^unique_by\((.+?)\)$/)
707 2 1 unless $use_entire_item
710 3 0 if (ref $_ eq 'ARRAY') { }
717 5 7 if ($use_entire_item) { }
721 7 0 @values ? :
725 12 0 if (defined $key_value) { }
731 4 8 if $seen{$signature}++
746 4 1155 if ($part eq "first")
748 3 0 ref $_ eq 'ARRAY' && @$_ ? :
755 2 1153 if ($part eq "last")
757 1 0 ref $_ eq 'ARRAY' && @$_ ? :
764 3 1150 if ($part eq "rest")
767 1 1 @$_ ? :
2 1 if (ref $_ eq 'ARRAY') { }
775 4 1146 if ($part eq "reverse")
777 2 1 JQ::Lite::Util::_is_string_scalar($_) ? :
1 3 if (ref $_ eq 'ARRAY') { }
786 5 1141 if ($part =~ /^limit\((.+)\)$/)
790 2 3 unless ($limit_str =~ /^\d+$/)
797 3 0 if (ref $_ eq 'ARRAY') { }
800 1 2 if $end > $arr->$#*
811 6 1135 if ($part =~ /^drop\((.+)\)$/)
815 2 4 unless ($count_str =~ /^\d+$/)
821 3 1 if (ref $_ eq 'ARRAY') { }
823 1 2 if ($count >= @$arr) { }
837 6 1129 if ($part =~ /^tail\((.+)\)$/)
841 2 4 unless ($count_str =~ /^\d+$/)
847 3 1 if (ref $_ eq 'ARRAY') { }
850 1 2 if ($count == 0 or not @$arr) { }
854 1 1 if $start < 0
868 7 1122 if ($part =~ /^chunks\((.+)\)$/)
872 2 5 unless ($size_str =~ /^\d+$/)
877 1 4 if $size < 1
880 4 1 if (ref $_ eq 'ARRAY') { }
882 1 3 if (not @$arr) { }
888 2 8 if $end > $arr->$#*
903 9 1113 if ($part =~ /^range\((.*)\)$/)
917 29 1084 if ($part =~ /^map\((.+)\)$/)
920 29 0 if (ref $_ eq 'ARRAY') { }
925 71 9 if @outputs
938 6 1078 if ($part =~ /^map_values\((.+)\)$/)
946 3 1075 if ($part =~ /^walk\((.+)\)$/)
954 2 1073 if ($part =~ /^recurse(?:\((.*)\))?$/)
955 1 1 defined $1 ? :
957 1 1 if $filter eq ""
965 4 1069 if ($part =~ /^enumerate(?:\(\))?$/)
967 3 1 if (ref $_ eq 'ARRAY') { }
984 3 1066 if ($part eq "to_entries")
991 10 1056 if ($part eq "from_entries")
998 1 1055 if ($part =~ /^with_entries\((.+)\)$/)
1006 4 1051 if ($part eq "transpose()" or $part eq "transpose")
1008 4 0 if (ref $_ eq 'ARRAY') { }
1011 1 3 if (not @$outer) { }
1 2 elsif (grep {ref $_ ne 'ARRAY';} @$outer) { }
1019 2 0 @lengths ? :
1021 0 2 if ($limit <= 0) { }
1041 9 1042 if ($part =~ /^slice(?:\((.*)\))?$/)
1042 9 0 defined $1 ? :
1051 3 1039 if ($part =~ /^pluck\((.+)\)$/)
1057 3 0 if (ref $_ eq 'ARRAY') { }
1061 7 2 @values ? :
1074 3 1036 if ($part =~ /^pick\((.*)\)$/)
1075 5 0 defined $_ ? :
1084 3 1033 if ($part eq "merge_objects()" or $part eq "merge_objects")
1091 1 1032 if ($part eq "add")
1093 1 0 if (ref $_ eq 'ARRAY') { }
1100 1 1031 if ($part eq "sum")
1102 1 0 if (ref $_ eq 'ARRAY') { }
1109 4 1027 if ($part =~ /^sum_by\((.+)\)$/)
1116 3 1 unless $use_entire_item
1119 4 0 if (ref $_ eq 'ARRAY') { }
1124 4 9 $use_entire_item ? :
1129 1 13 unless defined $value
1132 0 13 if (ref $num eq "JSON::PP::Boolean")
1133 0 0 $num ? :
1136 0 13 if ref $num
1137 1 12 unless &looks_like_number($num)
1143 4 0 $has_number ? :
1155 6 1021 if ($part =~ /^median_by\((.+)\)$/)
1159 6 0 if (ref $_ eq 'ARRAY') { }
1165 5 1 if (@numbers) { }
1169 3 2 if ($count % 2) { }
1188 5 1016 if ($part =~ /^avg_by\((.+)\)$/)
1192 5 0 if (ref $_ eq 'ARRAY') { }
1197 4 9 $use_entire_item ? :
1202 1 13 unless defined $value
1205 0 13 if (ref $num eq "JSON::PP::Boolean")
1206 0 0 $num ? :
1209 0 13 if ref $num
1210 1 12 unless &looks_like_number($num)
1216 4 1 $count ? :
1228 3 1013 if ($part =~ /^max_by\((.+)\)$/)
1232 3 0 if (ref $_ eq 'ARRAY') { }
1244 3 1010 if ($part =~ /^min_by\((.+)\)$/)
1248 3 0 if (ref $_ eq 'ARRAY') { }
1260 1 1009 if ($part eq "product")
1262 1 0 if (ref $_ eq 'ARRAY') { }
1266 0 3 unless defined $val
1270 1 0 $has_values ? :
1280 3 1006 if ($part eq "min")
1282 3 0 if (ref $_ eq 'ARRAY') { }
1284 2 1 @numbers ? :
1292 3 1003 if ($part eq "max")
1294 3 0 if (ref $_ eq 'ARRAY') { }
1296 2 1 @numbers ? :
1304 1 1002 if ($part eq "avg")
1306 1 0 ref $_ eq 'ARRAY' && @$_ ? :
1313 2 1000 if ($part eq "abs")
1315 0 2 if (not defined $_) { }
1 1 elsif (not ref $_) { }
1 0 elsif (ref $_ eq 'ARRAY') { }
1319 1 0 if (&looks_like_number($_)) { }
1322 3 1 if (&looks_like_number($_)) { }
1333 4 996 if ($part eq "ceil()" or $part eq "ceil")
1340 5 991 if ($part eq "floor()" or $part eq "floor")
1347 6 985 if ($part eq "round()" or $part eq "round")
1354 10 975 if ($part =~ /^clamp\((.*)\)$/)
1356 10 0 @args ? :
1357 9 1 @args > 1 ? :
1359 1 8 if (defined $min and defined $max and $min > $max)
1369 8 967 if ($part eq "tostring()" or $part eq "tostring")
1376 10 957 if ($part eq "tojson()" or $part eq "tojson")
1383 5 952 if ($part eq "fromjson()" or $part eq "fromjson")
1390 8 944 if ($part eq "to_number()" or $part eq "to_number")
1396 1 943 if ($part eq "tonumber()" or $part eq "tonumber")
1403 5 938 if ($part eq "median")
1405 5 0 if (ref $_ eq 'ARRAY' and @$_) { }
1409 4 1 if (@numbers) { }
1412 2 2 if ($count % 2) { }
1429 17 921 if ($part =~ /^percentile(?:\((.*)\))?$/)
1430 16 1 defined $1 ? :
1431 16 1 length $args_raw ? :
1432 16 1 @args ? :
1435 17 0 if (ref $_ eq 'ARRAY' and @$_) { }
1439 15 2 if (@numbers) { }
1440 12 3 defined $fraction ? :
1456 6 915 if ($part eq "mode")
1458 6 0 if (ref $_ eq 'ARRAY') { }
1459 1 5 if (not @$_) { }
1471 2 18 unless defined $item
1474 0 18 unless defined $key
1483 6 5 if (not defined $mode_key or $count > $max_count or $count == $max_count and !defined($best_index) || $index < $best_index)
1493 5 0 defined $mode_key ? :
1505 3 912 if ($part eq "variance")
1507 3 0 if (ref $_ eq 'ARRAY') { }
1510 2 1 if (@numbers) { }
1528 3 909 if ($part eq "stddev")
1530 3 0 if (ref $_ eq 'ARRAY') { }
1533 2 1 if (@numbers) { }
1552 4 905 if ($part =~ /^group_count\((.+)\)$/)
1562 5 900 if ($part =~ /^group_by\((.+)\)$/)
1572 6 894 if ($part eq "count")
1574 3 9 if (ref $_ eq 'ARRAY') { }
1 8 elsif (not defined $_) { }
1589 6 888 if ($part =~ /^all(?:\((.*)\))?$/)
1590 2 4 defined $1 ? :
1591 0 6 if defined $expr and $expr eq ""
1599 6 882 if ($part =~ /^any(?:\((.*)\))?$/)
1600 2 4 defined $1 ? :
1601 0 6 if defined $expr and $expr eq ""
1609 8 874 if ($part =~ /^join\((.*?)\)$/)
1613 1 7 if ref $_ ne "ARRAY"
1616 2 18 unless (defined $item)
1621 2 16 if (ref $item eq "JSON::PP::Boolean")
1622 1 1 $item ? :
1626 2 14 if (ref $item)
1640 2 872 if ($part =~ /^sort_by\((.+?)\)$/)
1648 2 0 if (ref $item eq 'ARRAY') { }
1667 13 859 if ($part eq "empty")
1673 1 858 if ($part eq "values")
1675 1 0 if (ref $_ eq 'HASH') { }
1682 3 855 if ($part eq "arrays()" or $part eq "arrays")
1684 4 4 ref $_ eq 'ARRAY' ? :
1691 3 852 if ($part eq "scalars()" or $part eq "scalars")
1693 1 7 if (not defined $_) { }
4 3 elsif (not ref $_ or ref $_ eq 'JSON::PP::Boolean') { }
1708 4 848 if ($part eq "objects()" or $part eq "objects")
1710 3 6 ref $_ eq 'HASH' ? :
1717 5 843 if ($part eq "flatten()" or $part eq "flatten")
1719 2 3 if (ref $_ eq 'ARRAY') { }
1728 2 841 if ($part eq "flatten_all()" or $part eq "flatten_all")
1730 2 0 if (ref $_ eq 'ARRAY') { }
1741 6 835 if ($part =~ /^flatten_depth(?:\((.*)\))?$/)
1742 5 1 defined $1 ? :
1743 5 1 length $args_raw ? :
1744 5 1 @args ? :
1746 0 6 unless (defined $depth and &looks_like_number($depth))
1751 0 6 if $depth < 0
1754 5 1 if (ref $_ eq 'ARRAY') { }
1766 9 826 if ($part eq "type()" or $part eq "type")
1768 1 8 if (not defined $_) { }
1 7 elsif (ref $_ eq 'ARRAY') { }
1 6 elsif (ref $_ eq 'HASH') { }
5 1 elsif (ref $_ eq '') { }
1 0 elsif (ref $_ eq 'JSON::PP::Boolean') { }
8 1 @results ? :
1781 3 2 $flags & 12288 ? :
1795 4 822 if ($part =~ /^nth\((\d+)\)$/)
1798 4 0 if (ref $_ eq 'ARRAY') { }
1809 5 817 if ($part =~ /^del\((.+?)\)$/)
1815 4 1 if (ref $_ eq 'HASH') { }
1828 10 807 if ($part =~ /^delpaths\((.*)\)$/)
1838 3 804 if ($part eq "compact()" or $part eq "compact")
1840 2 1 if (ref $_ eq 'ARRAY') { }
1851 3 801 if ($part eq "titlecase()" or $part eq "titlecase")
1858 10 791 if ($part eq "upper()" or $part eq "upper")
1865 3 788 if ($part eq "ascii_upcase()" or $part eq "ascii_upcase")
1872 3 785 if ($part eq "ascii_downcase()" or $part eq "ascii_downcase")
1879 7 778 if ($part eq "lower()" or $part eq "lower")
1886 8 770 if ($part eq "trim()" or $part eq "trim")
1893 10 760 if ($part =~ /^ltrimstr\((.+)\)$/)
1901 8 752 if ($part =~ /^rtrimstr\((.+)\)$/)
1909 7 745 if ($part =~ /^has\((.+)\)$/)
1911 7 0 @args ? :
1919 10 735 if ($part =~ /^contains\((.+)\)$/)
1927 11 724 if ($part =~ /^contains_subset\((.+)\)$/)
1935 7 717 if ($part =~ /^inside\((.+)\)$/)
1943 17 700 if ($part =~ /^test\((.+)\)$/)
1945 17 0 defined $pattern_expr ? :
1946 5 12 defined $flags_expr ? :
1954 10 690 if ($part =~ /^match\((.+)\)$/)
1956 10 0 defined $pattern_expr ? :
1957 4 6 defined $flags_expr ? :
1965 10 680 if ($part =~ /^startswith\((.+)\)$/)
1973 9 671 if ($part =~ /^endswith\((.+)\)$/)
1981 5 666 if ($part eq "explode()" or $part eq "explode")
1988 4 662 if ($part eq "implode()" or $part eq "implode")
1995 12 650 if ($part =~ /^replace\((.+)\)$/)
1997 12 0 defined $search ? :
1998 12 0 defined $replacement ? :
2006 11 639 if ($part eq "\@json" or $part eq "\@json()")
2013 3 636 if ($part eq "\@csv" or $part eq "\@csv()")
2020 3 633 if ($part eq "\@tsv" or $part eq "\@tsv()")
2027 6 627 if ($part eq "\@base64" or $part eq "\@base64()")
2034 7 620 if ($part eq "\@base64d" or $part eq "\@base64d()")
2041 8 612 if ($part eq "\@uri" or $part eq "\@uri()")
2048 18 594 if ($part =~ /^split\((.+)\)$/)
2056 10 584 if ($part =~ /^substr(?:\((.*)\))?$/)
2057 9 1 defined $1 ? :
2065 9 575 if ($part =~ /^indices\((.*)\)$/)
2067 9 0 @args ? :
2075 8 567 if ($part =~ /^index\((.*)\)$/)
2077 8 0 @args ? :
2080 4 4 if (ref $_ eq 'ARRAY') { }
4 0 elsif (not ref $_ or ref $_ eq 'JSON::PP::Boolean') { }
2084 3 4 if (JQ::Lite::Util::_values_equal($array->[$i], $needle))
2089 3 1 defined $found ? :
2092 3 1 if (not defined $_ && defined $needle) { }
2099 1 0 $pos >= 0 ? :
2112 9 558 if ($part =~ /^rindex\((.*)\)$/)
2114 9 0 @args ? :
2117 4 5 if (ref $_ eq 'ARRAY') { }
5 0 elsif (not ref $_ or ref $_ eq 'JSON::PP::Boolean') { }
2121 3 5 if (JQ::Lite::Util::_values_equal($array->[$i], $needle))
2126 3 1 defined $found ? :
2129 3 2 if (not defined $_ && defined $needle) { }
2136 2 0 $pos >= 0 ? :
2149 5 553 if ($part eq "paths()" or $part eq "paths")
2162 3 550 if ($part =~ /^paths\(\s*scalars\s*\)$/)
2175 6 544 if ($part eq "leaf_paths()" or $part eq "leaf_paths")
2182 14 530 if ($part =~ /^getpath\((.*)\)$/)
2183 14 0 defined $1 ? :
2191 10 520 if ($part =~ /^setpath\((.*)\)$/)
2192 10 0 defined $1 ? :
2201 4 516 if ($part eq "path")
2203 1 3 if (ref $_ eq 'HASH') { }
1 2 elsif (ref $_ eq 'ARRAY') { }
2218 11 505 if ($part eq "is_empty")
2220 2 9 ref $_ eq 'ARRAY' && !@$_ || ref $_ eq 'HASH' && !%$_ ? :
2229 5 500 if ($part eq "not" or $part eq "not()")
2231 2 3 JQ::Lite::Util::_is_truthy($_) ? :
2239 500 0 if (defined $coalesce_expr)
2246 5 495 if ($stripped =~ m[^(.*?)\s*//\s*(.+)$])
2260 6 489 if ($part =~ /^default\((.+)\)$/)
2264 2 4 @results ? :
2267 1 5 defined $_ ? :
2280 13 476 if ($ok) { }
2281 13 0 if (@$values) { }
2294 13 476 if ($all_ok)