| line | % | coverage | branch |
| 1051 | 100 | T | F | ref $_[0] eq 'HASH' ? : |
| 1059 | 100 | T | F | unless (defined $unknown_parameter_handler) |
| 1060 | 100 | T | F | if ($params->{'carp_on_warn'}) { } |
| 1067 | 100 | T | F | unless defined $schema |
| 1071 | 100 | T | F | if (ref $schema eq "ARRAY") |
| 1076 | 100 | T | F | if (ref $schema ne "HASH") |
| 1084 | 50 | T | F | if ($schema->{'members'} and $schema->{'description'} || $schema->{'error_msg'}) |
| 1089 | 100 | T | F | if (ref $schema eq "ARRAY") |
| 1094 | 100 | T | F | if (exists $params->{'args'} and not defined $args) { } |
| 100 | T | F | elsif (ref $args ne 'HASH' and ref $args ne 'ARRAY') { } |
| 1100 | 100 | T | F | if (ref $args eq "HASH") |
| 1103 | 100 | T | F | unless (exists $schema->{$key}) |
| 1104 | 100 | T | F | if ($unknown_parameter_handler eq 'die') { } |
| 100 | T | F | elsif ($unknown_parameter_handler eq 'warn') { } |
| 100 | T | F | elsif ($unknown_parameter_handler eq 'ignore') { } |
| 1110 | 100 | T | F | if ($logger) |
| 1124 | 100 | T | F | if (defined(my $rules = $schema->{$key})) { } |
| 1125 | 100 | T | F | if (ref $rules eq 'HASH') { } |
| 1126 | 100 | T | F | unless (defined $rules->{'position'}) |
| 1127 | 50 | T | F | if ($are_positional_args == 1) |
| 1149 | 100 | T | F | if ($are_positional_args == 1) { } |
| 1150 | 50 | T | F | if (ref $args ne "ARRAY") |
| 1158 | 100 | T | F | unless (defined $rules) |
| 1164 | 100 | T | F | if (ref $rules eq "") |
| 1172 | 100 | T | F | if (ref $rules eq "HASH") |
| 1173 | 100 | T | F | if (exists $rules->{'description'}) |
| 1181 | 100 | T | F | if ($is_stringref_type) |
| 1182 | 100 | T | F | if (ref $value ne "SCALAR") |
| 1183 | 100 | T | F | ref $value ? : |
| 1188 | 100 | T | F | if ($rules->{'transform'} and defined $value) |
| 1189 | 100 | T | F | if (ref $rules->{'transform'} eq 'CODE') { } |
| 1195 | 100 | T | F | if (exists $rules->{'optional'}) { } |
| 100 | T | F | elsif ($rules->{'nullable'}) { } |
| 100 | T | F | elsif (defined $rules->{'type'} and not ref $rules->{'type'} and lc $rules->{'type'} eq 'void') { } |
| 1196 | 100 | T | F | if (ref $rules->{'optional'} eq 'CODE') { } |
| 1200 | 100 | T | F | $is_stringref_type ? : |
| 1213 | 100 | T | F | if (ref $rules eq 'HASH' and $is_optional) { } |
| 100 | T | F | elsif (ref $args eq 'HASH' and not exists $args->{$key}) { } |
| 1216 | 100 | T | F | $are_positional_args == 1 ? : |
| 1217 | 100 | T | F | if ($missing) |
| 1218 | 100 | T | F | if ($are_positional_args == 1) |
| 1219 | 100 | T | F | if (scalar @{$args;} < $rules->{'position'}) |
| 1225 | 100 | T | F | if (exists $rules->{'default'}) |
| 1231 | 100 | T | F | if ($rules->{'schema'}) { } |
| 1233 | 100 | T | F | unless scalar %{$value;} |
| 1250 | 100 | T | F | if (ref $rules eq "HASH" and ref $rules->{'type'} eq "ARRAY") |
| 1253 | 100 | T | F | unless (@type_list) |
| 1261 | 100 | T | F | if (ref $rules eq 'HASH') { } |
| 100 | T | F | elsif (ref $rules eq 'ARRAY') { } |
| 50 | T | F | elsif (ref $rules) { } |
| 1262 | 100 | T | F | if (defined(my $min = $rules->{'min'} // $rules->{'minimum'}) and defined(my $max = $rules->{'max'})) |
| 1263 | 100 | T | F | if ($min > $max) |
| 1269 | 100 | T | F | if ($rules->{'memberof'} or $rules->{'enum'} or $rules->{'values'}) |
| 1270 | 100 | T | F | if (defined(my $min = $rules->{'min'} // $rules->{'minimum'})) |
| 1273 | 100 | T | F | if (defined(my $max = $rules->{'max'})) |
| 1281 | 100 | T | F | if (ref $rule_value eq "CODE" and $rule_name ne "validate" and $rule_name ne "callback" and $rule_name ne "validator" and $rule_name ne "transform" and $rule_name ne "optional") |
| 1291 | 100 | T | F | if (&Scalar::Util::blessed($rule_value) and $rule_value->can("as_string")) |
| 1295 | 100 | T | F | if ($rule_name eq 'type') { } |
| 100 | T | F | elsif ($rule_name eq 'min' or $rule_name eq 'minimum') { } |
| 100 | T | F | elsif ($rule_name eq 'max') { } |
| 100 | T | F | elsif ($rule_name eq 'matches' or $rule_name eq 'regex') { } |
| 100 | T | F | elsif ($rule_name eq 'nomatch') { } |
| 100 | T | F | elsif ($rule_name eq 'memberof' or $rule_name eq 'enum' or $rule_name eq 'values') { } |
| 100 | T | F | elsif ($rule_name eq 'notmemberof') { } |
| 100 | T | F | elsif ($rule_name eq 'isa') { } |
| 100 | T | F | elsif ($rule_name eq 'can') { } |
| 100 | T | F | elsif ($rule_name eq 'element_type') { } |
| 100 | T | F | elsif ($rule_name eq 'optional') { } |
| 100 | T | F | elsif ($rule_name eq 'nullable') { } |
| 100 | T | F | elsif ($rule_name eq 'default') { } |
| 100 | T | F | elsif ($rule_name eq 'error_msg') { } |
| 100 | T | F | elsif ($rule_name eq 'transform') { } |
| 100 | T | F | elsif ($rule_name eq 'case_sensitive') { } |
| 100 | T | F | elsif ($rule_name eq 'description') { } |
| 50 | T | F | elsif ($rule_name =~ /^_/) { } |
| 100 | T | F | elsif ($rule_name eq 'semantic') { } |
| 100 | T | F | elsif ($rule_name eq 'schema') { } |
| 100 | T | F | elsif ($rule_name eq 'validate' or $rule_name eq 'validator') { } |
| 100 | T | F | elsif ($rule_name eq 'callback') { } |
| 100 | T | F | elsif ($rule_name eq 'position') { } |
| 1298 | 100 | T | F | if ($type eq 'string' or $type eq 'str') { } |
| 100 | T | F | elsif ($type eq 'integer' or $type eq 'int') { } |
| 100 | T | F | elsif ($type eq 'number' or $type eq 'float' or $type eq 'num' or $type eq 'double') { } |
| 100 | T | F | elsif ($type eq 'arrayref') { } |
| 100 | T | F | elsif ($type eq 'hashref') { } |
| 100 | T | F | elsif ($type eq 'scalar') { } |
| 100 | T | F | elsif ($type eq 'scalarref') { } |
| 100 | T | F | elsif ($type eq 'stringref') { } |
| 100 | T | F | elsif ($type eq 'void') { } |
| 100 | T | F | elsif ($type eq 'boolean' or $type eq 'bool') { } |
| 100 | T | F | elsif ($type eq 'coderef') { } |
| 100 | T | F | elsif ($type eq 'object') { } |
| 100 | T | F | elsif (my $custom_type = $custom_types->{$type}) { } |
| 1299 | 100 | T | F | if (ref $value) |
| 1302 | 0 | T | F | unless (ref $value eq "" or defined $value and length $value) |
| 1306 | 100 | T | F | unless (defined $value) |
| 1309 | 100 | T | F | if (not &Scalar::Util::looks_like_number($value) or $value - $value != 0 or $value != int $value) |
| 1314 | 100 | T | F | unless (defined $value) |
| 1317 | 100 | T | F | unless (&Scalar::Util::looks_like_number($value)) |
| 1323 | 100 | T | F | unless (defined $value) |
| 1326 | 100 | T | F | if (ref $value ne "ARRAY") |
| 1330 | 100 | T | F | unless (defined $value) |
| 1333 | 100 | T | F | if (ref $value ne "HASH") |
| 1337 | 100 | T | F | unless (defined $value) |
| 1340 | 100 | T | F | if (ref $value) |
| 1344 | 100 | T | F | unless (defined $value) |
| 1347 | 100 | T | F | if (ref $value ne "SCALAR") |
| 1348 | 100 | T | F | ref $value ? : |
| 1352 | 100 | T | F | unless (defined $value) |
| 1357 | 100 | T | F | if (ref $value) |
| 1361 | 100 | T | F | if (scalar keys %{$schema;} != 1) |
| 1364 | 100 | T | F | if (defined $value) |
| 1368 | 100 | T | F | unless (defined $value) |
| 1371 | 100 | T | F | if (defined(my $b = $Readonly::Values::Boolean::booleans{$value})) { } |
| 1377 | 100 | T | F | unless (defined $value) |
| 1380 | 100 | T | F | if (ref $value ne "CODE") |
| 1384 | 100 | T | F | unless (defined $value) |
| 1387 | 100 | T | F | unless (&Scalar::Util::blessed($value)) |
| 1391 | 100 | T | F | if ($custom_type->{'transform'}) |
| 1393 | 100 | T | F | if (ref $custom_type->{'transform'} eq 'CODE') { } |
| 1404 | 50 | T | F | unless (defined $rules->{'type'}) |
| 1408 | 100 | T | F | if (exists $custom_types->{$type}{'min'} or exists $custom_types->{$type}{'minimum'}) |
| 1412 | 100 | T | F | if ($type eq 'string' or $type eq 'str' or $type eq 'stringref') { } |
| 100 | T | F | elsif ($type eq 'arrayref') { } |
| 100 | T | F | elsif ($type eq 'hashref') { } |
| 100 | T | F | elsif ($type eq 'integer' or $type eq 'number' or $type eq 'float') { } |
| 1413 | 100 | T | F | if ($rule_value < 0) |
| 1416 | 50 | T | F | unless (defined $value) |
| 1419 | 50 | T | F | if (defined(my $len = _number_of_characters($value))) { } |
| 1420 | 100 | T | F | if ($len < $rule_value) |
| 1429 | 50 | T | F | unless (defined $value) |
| 1432 | 100 | T | F | if (scalar @{$value;} < $rule_value) |
| 1433 | 100 | T | F | $rule_value > 1 ? : |
| 1437 | 50 | T | F | unless (defined $value) |
| 1440 | 100 | T | F | if (scalar keys %{$value;} < $rule_value) |
| 1445 | 50 | T | F | unless (defined $value) |
| 1448 | 50 | T | F | if (&Scalar::Util::looks_like_number($value)) { } |
| 1449 | 100 | T | F | if ($value < $rule_value) |
| 1450 | 100 | T | F | if ($rules->{'error_msg'}) { } |
| 100 | T | F | elsif ($type eq 'integer' and $value == 0) { } |
| 50 | T | F | elsif ($type eq 'integer' and $value == 1) { } |
| 1470 | 50 | T | F | unless (defined $rules->{'type'}) |
| 1474 | 100 | T | F | if (exists $custom_types->{$type}{'max'}) |
| 1478 | 100 | T | F | if ($type eq 'string' or $type eq 'str' or $type eq 'stringref') { } |
| 100 | T | F | elsif ($type eq 'arrayref') { } |
| 100 | T | F | elsif ($type eq 'hashref') { } |
| 100 | T | F | elsif ($type eq 'integer' or $type eq 'number' or $type eq 'float') { } |
| 1479 | 50 | T | F | unless (defined $value) |
| 1482 | 50 | T | F | if (defined(my $len = _number_of_characters($value))) { } |
| 1483 | 100 | T | F | if ($len > $rule_value) |
| 1492 | 50 | T | F | unless (defined $value) |
| 1495 | 100 | T | F | if (scalar @{$value;} > $rule_value) |
| 1500 | 50 | T | F | unless (defined $value) |
| 1503 | 100 | T | F | if (scalar keys %{$value;} > $rule_value) |
| 1508 | 50 | T | F | unless (defined $value) |
| 1511 | 50 | T | F | if (&Scalar::Util::looks_like_number($value)) { } |
| 1512 | 100 | T | F | if ($value > $rule_value) |
| 1513 | 50 | T | F | if ($rules->{'error_msg'}) { } |
| 50 | T | F | elsif ($type eq 'integer' and $value == 0) { } |
| 50 | T | F | elsif ($type eq 'integer' and $value == -1) { } |
| 1533 | 100 | T | F | unless (defined $value) |
| 1537 | 100 | T | F | ref $rule_value eq 'Regexp' ? : |
| 1538 | 100 | T | F | if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { } |
| 100 | T | F | elsif (not $value =~ /$re/) { } |
| 1540 | 100 | T | F | unless (&all(sub {
$_ =~ /$re/;
}
, @{$value;})) |
| 1548 | 100 | T | F | if ($@) |
| 1553 | 50 | T | F | unless (defined $value) |
| 1558 | 50 | T | F | ref $rule_value eq 'Regexp' ? : |
| 1560 | 100 | T | F | if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { } |
| 100 | T | F | elsif ($value =~ /$re/) { } |
| 1562 | 100 | T | F | if (&any(sub {
$_ =~ /$re/;
}
, @{$value;})) |
| 1571 | 100 | T | F | if ($@) |
| 1576 | 50 | T | F | unless (defined $value) |
| 1579 | 100 | T | F | if (ref $rule_value eq 'ARRAY') { } |
| 1580 | 100 | T | F | unless (_value_in_list($value, $rule_value, $rules->{'type'} // "", $rules->{'case_sensitive'})) |
| 1588 | 50 | T | F | unless (defined $value) |
| 1591 | 100 | T | F | if (ref $rule_value eq 'ARRAY') { } |
| 1592 | 100 | T | F | if (_value_in_list($value, $rule_value, $rules->{'type'} // "", $rules->{'case_sensitive'})) |
| 1600 | 50 | T | F | unless (defined $value) |
| 1603 | 100 | T | F | if ($rules->{'type'} eq 'object') { } |
| 1604 | 100 | T | F | unless ($value->isa($rule_value)) |
| 1605 | 50 | T | F | ref $value ? : |
| 1612 | 50 | T | F | unless (defined $value) |
| 1615 | 100 | T | F | if ($rules->{'type'} eq 'object') { } |
| 1616 | 100 | T | F | if (ref $rule_value eq 'ARRAY') { } |
| 100 | T | F | elsif (not ref $rule_value) { } |
| 1619 | 100 | T | F | unless ($value->can($method)) |
| 1625 | 100 | T | F | unless ($value->can($rule_value)) |
| 1636 | 100 | T | F | if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { } |
| 1639 | 50 | T | F | if ($custom_type and $custom_type->{'type'}) |
| 1643 | 100 | T | F | if ($custom_type and $custom_type->{'transform'}) |
| 1645 | 100 | T | F | if (ref $custom_type->{'transform'} eq 'CODE') { } |
| 1651 | 100 | T | F | if ($type eq 'string' or $type eq 'Str') { } |
| 100 | T | F | elsif ($type eq 'integer') { } |
| 100 | T | F | elsif ($type eq 'number' or $rule_value eq 'float') { } |
| 50 | T | F | elsif ($type eq 'object') { } |
| 1652 | 100 | T | F | if (ref $member) |
| 1657 | 100 | T | F | if (ref $member or $member =~ /\D/) |
| 1662 | 100 | T | F | if (ref $member or not $member =~ /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)$/) |
| 1667 | 0 | T | F | unless (&Scalar::Util::blessed($member)) |
| 1695 | 100 | T | F | if ($rule_value eq 'unix_timestamp') { } |
| 1696 | 100 | T | F | if ($value < 0 or $value > 2147483647) |
| 1704 | 100 | T | F | if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { } |
| 100 | T | F | elsif ($rules->{'type'} eq 'hashref') { } |
| 1705 | 50 | T | F | if (ref $value eq 'ARRAY') { } |
| 0 | T | F | elsif (defined $value) { } |
| 1715 | 100 | T | F | if ($is_field_schema) { } |
| 1722 | 50 | T | F | unless (validate_strict(\%inner)) |
| 1730 | 50 | T | F | if (ref $rule_value eq 'HASH') { } |
| 1733 | 100 | T | F | if (scalar keys %{$nested_with_defaults;}) |
| 1734 | 50 | T | F | if (my $new_args = validate_strict({'input', $nested_with_defaults, 'schema', $rule_value, 'custom_types', $custom_types})) { } |
| 1747 | 100 | T | F | if (ref $rule_value eq 'CODE') { } |
| 1748 | 100 | T | F | if (my $error = &{$rule_value;}($args)) |
| 1758 | 100 | T | F | unless (defined &$rule_value) |
| 1762 | 100 | T | F | unless ($res) |
| 1767 | 50 | T | F | if ($rule_value < 0) |
| 1770 | 100 | T | F | if ($rule_value =~ /\D/) |
| 1778 | 100 | T | F | if (scalar @{$rules;}) { } |
| 1785 | 100 | T | F | if (ref $rule ne "HASH") |
| 1788 | 50 | T | F | unless (defined $rule->{'type'}) |
| 1796 | 100 | T | F | unless ($@) |
| 1799 | 50 | T | F | if defined $result |
| 1804 | 100 | T | F | unless ($rc) |
| 1819 | 100 | T | F | if (my $relationships = $params->{'relationships'}) |
| 1823 | 100 | T | F | if (my $cross_validation = $params->{'cross_validation'}) |
| 1826 | 100 | T | F | if (not ref $validator or ref $validator ne "CODE") |
| 1830 | 100 | T | F | if (my $error = &{$validator;}(\%validated_args, $validator)) |
| 1842 | 100 | T | F | if ($are_positional_args == 1) |
| 1848 | 100 | T | F | if (exists $validated_args{$key}) |
| 1851 | 100 | T | F | if (defined $rc[$position]) |
| 1878 | 100 | T | F | unless ref $spec eq "HASH" |
| 1881 | 100 | T | F | unless exists $spec->{'name'} |
| 1885 | 100 | T | F | if exists $schema{$name} |
| 1897 | 100 | T | F | unless defined $value |
| 1899 | 100 | T | F | unless ($value =~ /[^[:ascii:]]/) |
| 1903 | 100 | T | F | unless utf8::is_utf8($value) |
| 1919 | 100 | T | F | if (ref $rules eq "HASH" and exists $rules->{'default'} and not exists $result{$key}) |
| 1924 | 100 | T | F | if (ref $rules eq "HASH" and $rules->{'schema'} and ref $result{$key} eq "HASH") |
| 1935 | 50 | T | F | unless ref $relationships eq "ARRAY" |
| 1938 | 50 | T | F | unless my $type = $rel->{'type'} |
| 1940 | 100 | T | F | if ($type eq 'mutually_exclusive') { } |
| 100 | T | F | elsif ($type eq 'required_group') { } |
| 100 | T | F | elsif ($type eq 'conditional_requirement') { } |
| 100 | T | F | elsif ($type eq 'dependency') { } |
| 100 | T | F | elsif ($type eq 'value_constraint') { } |
| 100 | T | F | elsif ($type eq 'value_conditional') { } |
| 1961 | 50 | T | F | unless $rel->{'params'} |
| 1962 | 50 | T | F | unless @params >= 2 |
| 1966 | 100 | T | F | if (@present > 1) |
| 1975 | 50 | T | F | unless $rel->{'params'} |
| 1976 | 100 | T | F | unless @params >= 2 |
| 1980 | 100 | T | F | if (@present == 0) |
| 1990 | 100 | T | F | unless my $if_param = $rel->{'if'} |
| 1991 | 100 | T | F | unless my $then_param = $rel->{'then_required'} |
| 1994 | 100 | T | F | if (_param_defined($args, $if_param)) |
| 1996 | 100 | T | F | if ($args->{$if_param}) |
| 1998 | 100 | T | F | unless (_param_defined($args, $then_param)) |
| 2009 | 100 | T | F | unless my $param = $rel->{'param'} |
| 2010 | 50 | T | F | unless my $requires = $rel->{'requires'} |
| 2013 | 100 | T | F | if (_param_defined($args, $param)) |
| 2014 | 100 | T | F | unless (_param_defined($args, $requires)) |
| 2024 | 50 | T | F | unless my $if_param = $rel->{'if'} |
| 2025 | 50 | T | F | unless my $then_param = $rel->{'then'} |
| 2026 | 50 | T | F | unless my $operator = $rel->{'operator'} |
| 2028 | 50 | T | F | unless defined $value |
| 2031 | 100 | T | F | if (_param_defined($args, $if_param) and $args->{$if_param}) |
| 2033 | 50 | T | F | if (_param_defined($args, $then_param)) |
| 2037 | 100 | T | F | if ($operator eq '==') { } |
| 100 | T | F | elsif ($operator eq '!=') { } |
| 100 | T | F | elsif ($operator eq '<') { } |
| 100 | T | F | elsif ($operator eq '<=') { } |
| 100 | T | F | elsif ($operator eq '>') { } |
| 100 | T | F | elsif ($operator eq '>=') { } |
| 2051 | 100 | T | F | unless ($valid) |
| 2062 | 50 | T | F | unless my $if_param = $rel->{'if'} |
| 2064 | 50 | T | F | unless my $then_param = $rel->{'then_required'} |
| 2065 | 50 | T | F | unless defined $equals |
| 2068 | 100 | T | F | if (_param_defined($args, $if_param)) |
| 2069 | 100 | T | F | if ($args->{$if_param} eq $equals) |
| 2071 | 100 | T | F | unless (_param_defined($args, $then_param)) |
| 2108 | 100 | T | F | $is_icase ? : |
| 100 | T | F | $is_numeric ? : |
| 2113 | 50 | T | F | if (defined $entry and not defined $entry->[0]) |
| 2118 | 100 | T | F | unless (defined $entry) |
| 2120 | 100 | T | F | if ($is_numeric) { } |
| 100 | T | F | elsif ($is_icase) { } |
| 2138 | 100 | T | F | $is_icase ? : |
| 100 | T | F | $is_numeric ? : |
| 2158 | 100 | T | F | if ($logger) |
| 2172 | 100 | T | F | if ($logger) { } |