Branch Coverage

blib/lib/Params/Validate/Strict.pm
Criterion Covered Total %
branch 444 578 76.8


line true false branch
961 509 16 unless (defined $unknown_parameter_handler)
962 0 509 if ($params->{'carp_on_warn'}) { }
969 1 524 unless defined $schema
972 2 522 if (ref $schema ne "HASH")
980 1 0 if ($schema->{'members'} and $schema->{'description'} || $schema->{'error_msg'})
986 1 521 if (exists $params->{'args'} and not defined $args) { }
2 1033 elsif (ref $args ne 'HASH' and ref $args ne 'ARRAY') { }
992 515 5 if (ref $args eq "HASH")
995 13 663 unless (exists $schema->{$key})
996 5 8 if ($unknown_parameter_handler eq 'die') { }
4 4 elsif ($unknown_parameter_handler eq 'warn') { }
2 2 elsif ($unknown_parameter_handler eq 'ignore') { }
1002 1 1 if ($logger)
1016 512 2 if (defined(my $rules = $schema->{$key})) { }
1017 480 32 if (ref $rules eq 'HASH') { }
1018 473 7 unless (defined $rules->{'position'})
1019 1 472 if ($are_positional_args == 1)
1041 6 734 if ($are_positional_args == 1) { }
1042 0 6 if (ref $args ne "ARRAY")
1050 2 738 unless (defined $rules)
1056 27 711 if (ref $rules eq "")
1064 725 13 if (ref $rules eq "HASH")
1065 0 725 if (exists $rules->{'description'})
1068 40 685 if ($rules->{'transform'} and defined $value)
1069 38 2 if (ref $rules->{'transform'} eq 'CODE') { }
1075 162 561 if (exists $rules->{'optional'}) { }
0 561 elsif ($rules->{'nullable'}) { }
1076 9 153 if (ref $rules->{'optional'} eq 'CODE') { }
1087 153 583 if (ref $rules eq 'HASH' and $is_optional) { }
7 580 elsif (ref $args eq 'HASH' and not exists $args->{$key}) { }
1089 2 151 if ($are_positional_args == 1) { }
1091 1 1 unless (defined $$args[$rules->{'position'}])
1095 79 72 unless (exists $args->{$key})
1099 80 73 if ($look_for_default)
1100 1 79 if ($are_positional_args == 1)
1101 0 1 if (scalar @{$args;} < $rules->{'position'})
1107 5 75 if (exists $rules->{'default'})
1112 4 76 if ($rules->{'schema'}) { }
1114 3 1 unless scalar %{$value;}
1126 637 13 if (ref $rules eq 'HASH') { }
12 1 elsif (ref $rules eq 'ARRAY') { }
1 0 elsif (ref $rules) { }
1127 80 557 if (defined(my $min = $rules->{'min'}) and defined(my $max = $rules->{'max'}))
1128 5 75 if ($min > $max)
1133 69 563 if ($rules->{'memberof'})
1134 3 66 if (defined(my $min = $rules->{'min'}))
1137 1 65 if (defined(my $max = $rules->{'max'}))
1145 53 16 if (ref $rule_value eq "CODE" and $rule_name ne "validate" and $rule_name ne "callback" and $rule_name ne "validator")
1150 0 1192 if (builtin::blessed($rule_value) and $rule_value->can("as_string"))
1154 565 627 if ($rule_name eq 'type') { }
162 465 elsif ($rule_name eq 'min') { }
66 399 elsif ($rule_name eq 'max') { }
59 340 elsif ($rule_name eq 'matches') { }
7 333 elsif ($rule_name eq 'nomatch') { }
65 268 elsif ($rule_name eq 'memberof' or $rule_name eq 'enum') { }
24 244 elsif ($rule_name eq 'notmemberof') { }
6 238 elsif ($rule_name eq 'isa') { }
16 222 elsif ($rule_name eq 'can') { }
18 204 elsif ($rule_name eq 'element_type') { }
69 135 elsif ($rule_name eq 'optional') { }
3 132 elsif ($rule_name eq 'default') { }
11 121 elsif ($rule_name eq 'error_msg') { }
36 85 elsif ($rule_name eq 'transform') { }
16 69 elsif ($rule_name eq 'case_sensitive') { }
0 69 elsif ($rule_name eq 'description') { }
0 69 elsif ($rule_name =~ /^_/) { }
1 68 elsif ($rule_name eq 'semantic') { }
44 24 elsif ($rule_name eq 'schema') { }
2 22 elsif ($rule_name eq 'validate' or $rule_name eq 'validator') { }
17 5 elsif ($rule_name eq 'callback') { }
5 0 elsif ($rule_name eq 'position') { }
1157 256 309 if ($type eq 'string' or $type eq 'str') { }
94 215 elsif ($type eq 'integer') { }
49 166 elsif ($type eq 'number' or $type eq 'float') { }
37 129 elsif ($type eq 'arrayref') { }
39 90 elsif ($type eq 'hashref') { }
23 67 elsif ($type eq 'boolean' or $type eq 'bool') { }
3 64 elsif ($type eq 'coderef') { }
17 47 elsif ($type eq 'object') { }
46 1 elsif (my $custom_type = $custom_types->{$type}) { }
1158 6 250 if (ref $value)
1161 0 0 unless (ref $value eq "" or defined $value and length $value)
1165 1 93 unless (defined $value)
1168 6 87 unless ($value =~ /^\s*[+\-]?\d+\s*$/)
1169 1 5 if ($rules->{'error_msg'}) { }
1177 2 47 unless (defined $value)
1180 2 45 unless (&Scalar::Util::looks_like_number($value))
1181 0 2 if ($rules->{'error_msg'}) { }
1190 2 35 unless (defined $value)
1193 1 34 if (ref $value ne "ARRAY")
1194 0 1 if ($rules->{'error_msg'}) { }
1201 2 37 unless (defined $value)
1204 0 37 if (ref $value ne "HASH")
1205 0 0 if ($rules->{'error_msg'}) { }
1212 1 22 unless (defined $value)
1215 3 19 if ($value eq 'true' or $value eq 'on' or $value eq 'yes') { }
3 16 elsif ($value eq 'false' or $value eq 'off' or $value eq 'no') { }
1220 2 20 if ($value ne 1 and $value ne 0)
1221 0 2 if ($rules->{'error_msg'}) { }
1229 1 2 unless (defined $value)
1232 0 2 if (ref $value ne "CODE")
1233 0 0 if ($rules->{'error_msg'}) { }
1240 1 16 unless (defined $value)
1243 1 15 unless (builtin::blessed($value))
1244 0 1 if ($rules->{'error_msg'}) { }
1251 6 40 if ($custom_type->{'transform'})
1253 6 0 if (ref $custom_type->{'transform'} eq 'CODE') { }
1265 0 162 unless (defined $rules->{'type'})
1269 3 159 if (exists $custom_types->{$type}{'min'})
1273 56 106 if ($type eq 'string' or $type eq 'str') { }
17 89 elsif ($type eq 'arrayref') { }
4 85 elsif ($type eq 'hashref') { }
84 1 elsif ($type eq 'integer' or $type eq 'number' or $type eq 'float') { }
1274 1 55 if ($rule_value < 0)
1275 0 1 if ($rules->{'error_msg'}) { }
1281 1 54 unless (defined $value)
1284 54 0 if (defined(my $len = _number_of_characters($value))) { }
1285 7 47 if ($len < $rule_value)
1294 0 17 unless (defined $value)
1297 1 16 if (ref $value ne "ARRAY")
1298 0 1 if ($rules->{'error_msg'}) { }
1304 2 14 if (scalar @{$value;} < $rule_value)
1305 0 2 if ($rules->{'error_msg'}) { }
1313 0 4 unless (defined $value)
1316 1 3 if (scalar keys %{$value;} < $rule_value)
1317 0 1 if ($rules->{'error_msg'}) { }
1325 0 84 unless (defined $value)
1328 84 0 if (&Scalar::Util::looks_like_number($value)) { }
1329 19 65 if ($value < $rule_value)
1330 3 16 if ($rules->{'error_msg'}) { }
1339 0 0 if ($rules->{'error_msg'}) { }
1350 0 66 unless (defined $rules->{'type'})
1354 2 64 if (exists $custom_types->{$type}{'max'})
1358 24 42 if ($type eq 'string' or $type eq 'str') { }
7 35 elsif ($type eq 'arrayref') { }
3 32 elsif ($type eq 'hashref') { }
31 1 elsif ($type eq 'integer' or $type eq 'number' or $type eq 'float') { }
1359 1 23 unless (defined $value)
1362 23 0 if (defined(my $len = _number_of_characters($value))) { }
1363 5 18 if ($len > $rule_value)
1372 0 7 unless (defined $value)
1375 0 7 if (ref $value ne "ARRAY")
1376 0 0 if ($rules->{'error_msg'}) { }
1382 4 3 if (scalar @{$value;} > $rule_value)
1383 0 4 if ($rules->{'error_msg'}) { }
1391 0 3 unless (defined $value)
1394 2 1 if (scalar keys %{$value;} > $rule_value)
1395 0 2 if ($rules->{'error_msg'}) { }
1403 0 31 unless (defined $value)
1406 31 0 if (&Scalar::Util::looks_like_number($value)) { }
1407 4 27 if ($value > $rule_value)
1408 0 4 if ($rules->{'error_msg'}) { }
1417 0 0 if ($rules->{'error_msg'}) { }
1428 1 58 unless (defined $value)
1432 55 3 ref $rule_value eq 'Regexp' ? :
1433 2 56 if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { }
17 39 elsif (not $value =~ /$re/) { }
1435 0 2 if (scalar @matches != scalar @{$value;})
1436 0 0 if ($rules->{'error_msg'}) { }
1443 3 14 if ($rules->{'error_msg'}) { }
1451 17 41 if ($@)
1452 3 14 if ($rules->{'error_msg'}) { }
1460 0 7 unless (defined $value)
1463 3 4 if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { }
1 3 elsif ($value =~ /$rule_value/) { }
1465 1 2 if (scalar @matches)
1466 0 1 if ($rules->{'error_msg'}) { }
1473 0 1 if ($rules->{'error_msg'}) { }
1481 0 65 unless (defined $value)
1484 63 2 if (ref $rule_value eq 'ARRAY') { }
1486 12 51 if ($rules->{'type'} eq 'integer' or $rules->{'type'} eq 'number' or $rules->{'type'} eq 'float') { }
1487 5 7 unless (&List::Util::any(sub { $_ == $value; } , @{$rule_value;}))
1492 216 30 !defined($rules->{'case_sensitive'}) || $rules->{'case_sensitive'} == 1 ? :
15 36 unless (&List::Util::any(sub { !defined($rules->{'case_sensitive'}) || $rules->{'case_sensitive'} == 1 ? $_ eq $value : lc $_ eq $l; } , @{$rule_value;}))
1497 20 43 unless ($ok)
1498 3 17 if ($rules->{'error_msg'}) { }
1506 0 2 if ($rules->{'error_msg'}) { }
1513 0 24 unless (defined $value)
1516 23 1 if (ref $rule_value eq 'ARRAY') { }
1518 6 17 if ($rules->{'type'} eq 'integer' or $rules->{'type'} eq 'number' or $rules->{'type'} eq 'float') { }
1519 4 2 if (&List::Util::any(sub { $_ == $value; } , @{$rule_value;}))
1524 33 0 !defined($rules->{'case_sensitive'}) || $rules->{'case_sensitive'} == 1 ? :
9 8 if (&List::Util::any(sub { !defined($rules->{'case_sensitive'}) || $rules->{'case_sensitive'} == 1 ? $_ eq $value : lc $_ eq $l; } , @{$rule_value;}))
1529 13 10 unless ($ok)
1530 1 12 if ($rules->{'error_msg'}) { }
1538 0 1 if ($rules->{'error_msg'}) { }
1545 0 6 unless (defined $value)
1548 5 1 if ($rules->{'type'} eq 'object') { }
1549 1 4 unless ($value->isa($rule_value))
1550 1 0 ref $value ? :
1557 0 16 unless (defined $value)
1560 15 1 if ($rules->{'type'} eq 'object') { }
1561 8 7 if (ref $rule_value eq 'ARRAY') { }
6 1 elsif (not ref $rule_value) { }
1564 4 11 unless ($value->can($method))
1570 3 3 unless ($value->can($rule_value))
1581 18 0 if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { }
1584 1 0 if ($custom_type and $custom_type->{'type'})
1588 2 0 if ($custom_type and $custom_type->{'transform'})
1590 2 0 if (ref $custom_type->{'transform'} eq 'CODE') { }
1597 15 27 if ($type eq 'string' or $type eq 'Str') { }
23 4 elsif ($type eq 'integer') { }
4 0 elsif ($type eq 'number' or $rule_value eq 'float') { }
1598 0 15 if (ref $member)
1599 0 0 if ($rules->{'error_msg'}) { }
1607 2 21 if (ref $member or $member =~ /\D/)
1608 1 1 if ($rules->{'error_msg'}) { }
1616 1 3 if (ref $member or not $member =~ /^[-+]?(\d*\.\d+|\d+\.?\d*)$/)
1617 0 1 if ($rules->{'error_msg'}) { }
1646 1 0 if ($rule_value eq 'unix_timestamp') { }
1647 0 1 if ($value < 0 or $value > 2147483647)
1655 11 33 if ($rules->{'type'} eq 'arrayref' or $rules->{'type'} eq 'ArrayRef') { }
33 0 elsif ($rules->{'type'} eq 'hashref') { }
1656 11 0 if (ref $value eq 'ARRAY') { }
0 0 elsif (defined $value) { }
1658 0 10 unless (validate_strict({"input", {$key, $member}, "schema", {$key, $rule_value}, "custom_types", $custom_types}))
1666 33 0 if (ref $value eq 'HASH') { }
1669 31 2 if (scalar keys %{$value;})
1670 20 0 if (my $new_args = validate_strict({'input', $nested_with_defaults, 'schema', $rule_value, 'custom_types', $custom_types})) { }
1683 2 0 if (ref $rule_value eq 'CODE') { }
1684 1 1 if (my $error = &{$rule_value;}($args))
1693 1 16 unless (defined &$rule_value)
1697 6 9 unless ($res)
1698 0 6 if ($rules->{'error_msg'}) { }
1706 0 5 if ($rule_value =~ /\D/)
1709 0 5 if ($rule_value < 0)
1717 10 2 if (scalar @{$rules;}) { }
1722 1 16 if (ref $rule ne "HASH")
1726 0 16 unless (defined $rule->{'type'})
1734 7 9 unless ($@)
1739 2 7 unless ($rc)
1754 6 306 if (my $relationships = $params->{'relationships'})
1758 37 270 if (my $cross_validation = $params->{'cross_validation'})
1761 1 41 if (not ref $validator or ref $validator ne "CODE")
1765 18 23 if (my $error = &{$validator;}(\%validated_args, $validator))
1777 4 284 if ($are_positional_args == 1)
1780 6 0 if (my $value = delete $validated_args{$key})
1782 1 5 if (defined $rc[$position])
1799 0 77 unless defined $value
1801 71 6 unless ($value =~ /[^[:ascii:]]/)
1805 6 0 unless utf8::is_utf8($value)
1821 2 103 if (ref $rules eq "HASH" and exists $rules->{'default'} and not exists $result{$key})
1826 8 97 if (ref $rules eq "HASH" and $rules->{'schema'} and ref $result{$key} eq "HASH")
1837 0 6 unless ref $relationships eq "ARRAY"
1840 0 6 unless my $type = $rel->{'type'}
1842 1 5 if ($type eq 'mutually_exclusive') { }
1 4 elsif ($type eq 'required_group') { }
1 3 elsif ($type eq 'conditional_requirement') { }
1 2 elsif ($type eq 'dependency') { }
1 1 elsif ($type eq 'value_constraint') { }
1 0 elsif ($type eq 'value_conditional') { }
1863 0 1 unless $rel->{'params'}
1864 0 1 unless @params >= 2
1866 2 0 if exists $args->{$_}
1868 1 0 if (@present > 1)
1877 0 1 unless $rel->{'params'}
1878 0 1 unless @params >= 2
1880 0 2 if exists $args->{$_}
1882 1 0 if (@present == 0)
1892 0 1 unless my $if_param = $rel->{'if'}
1893 0 1 unless my $then_param = $rel->{'then_required'}
1896 1 0 if (exists $args->{$if_param} and defined $args->{$if_param})
1898 1 0 if ($args->{$if_param})
1900 0 1 unless (exists $args->{$then_param} and defined $args->{$then_param})
1911 0 1 unless my $param = $rel->{'param'}
1912 0 1 unless my $requires = $rel->{'requires'}
1915 1 0 if (exists $args->{$param} and defined $args->{$param})
1916 1 0 unless (exists $args->{$requires} and defined $args->{$requires})
1926 0 1 unless my $if_param = $rel->{'if'}
1927 0 1 unless my $then_param = $rel->{'then'}
1928 0 1 unless my $operator = $rel->{'operator'}
1930 0 1 unless defined $value
1933 1 0 if (exists $args->{$if_param} and defined $args->{$if_param} and $args->{$if_param})
1935 1 0 if (exists $args->{$then_param} and defined $args->{$then_param})
1939 1 0 if ($operator eq '==') { }
0 0 elsif ($operator eq '!=') { }
0 0 elsif ($operator eq '<') { }
0 0 elsif ($operator eq '<=') { }
0 0 elsif ($operator eq '>') { }
0 0 elsif ($operator eq '>=') { }
1953 1 0 unless ($valid)
1964 0 1 unless my $if_param = $rel->{'if'}
1966 0 1 unless my $then_param = $rel->{'then_required'}
1967 0 1 unless defined $equals
1970 1 0 if (exists $args->{$if_param} and defined $args->{$if_param})
1971 1 0 if ($args->{$if_param} eq $equals)
1973 1 0 unless (exists $args->{$then_param} and defined $args->{$then_param})
1989 12 210 if ($logger)
2003 3 1 if ($logger) { }