Condition Coverage

lib/Getopt/Class.pm
Criterion Covered Total %
condition 107 273 39.1


and 2 conditions

line l !l condition
395 0 32 $def->{'alias'} and scalar @{$def->{'alias'};}

and 3 conditions

line !l l&&!r l&&r condition
86 72 0 42 $def->{'type'} eq "boolean" and not exists $def->{'mirror'}
90 42 0 0 substr($k, 0, 5) eq "with_" and not exists $$dict{'without_' . substr($k, 5)}
36 0 6 substr($k, 0, 8) eq "without_" and not exists $$dict{'with_' . substr($k, 8)}
30 0 6 substr($k, 0, 7) eq "enable_" and not exists $$dict{'disable_' . substr($k, 7)}
24 0 6 substr($k, 0, 8) eq "disable_" and not exists $$dict{'enable_' . substr($k, 8)}
129 0 0 18 exists $def->{'default'} and defined $def->{'default'}
186 132 0 0 index($k, "-") != -1 and $k eq $k2_dash
194 0 114 18 not ref $def->{'alias'} and length $def->{'alias'}
212 48 0 84 defined $def->{'default'} and ref $def->{'default'} || length $def->{'default'}
231 18 0 18 $def->{'type'} eq "code" and ref $def->{'code'} eq "CODE"
250 60 0 0 exists $def->{'code'} and ref $def->{'code'} eq "CODE"
60 0 0 exists $def->{'code'} and ref $def->{'code'} eq "CODE" and ref($opts->{$k2_under} // "") ne "CODE"
302 120 12 0 $def->{'re'} and ref $def->{'re'} ne "Regexp"
320 1 0 0 scalar @_ and $self->_is_hash($_[0])
333 4 0 0 not !$p->{'required'} and $def->{'required'}
335 0 0 0 $def->{'type'} =~ /^(?:boolean|decimal|integer|string)/ and not length $v->{$f}
0 0 0 $def->{'type'} eq 'hash' || $def->{'type'} eq 'string-hash' and not scalar keys %{$$v{$f};}
0 0 0 $def->{'type'} eq "array" and not scalar @{$v->{$f};}
343 3 0 0 $def->{'type'} eq "decimal" and not $v->{$f} =~ /^\d+(\.\d{1,12})?$/
345 1 0 0 $def->{'type'} eq "string" and length $v->{$f}
1 0 0 $def->{'type'} eq "string" and length $v->{$f} and not $v->{$f} =~ /$def->{'re'}/
377 2 2 0 scalar keys %$classes and not exists $classes->{$class}
492 0 1 0 exists $opts->{$key} and !(defined $opts->{$key} && length $opts->{$key}) || $opts->{$key} =~ /^[[:blank:]]*$/ || ref $opts->{$key} eq 'SCALAR' && (!length(${$opts->{$key};}) || ${$opts->{$key};} =~ /^[[:blank:]]*$/) || ref $opts->{$key} eq 'ARRAY' && !scalar(@{$opts->{$key};})
551 1 0 0 scalar @_ and $self->_is_hash($_[0])
590 105 0 2 $def->{'type'} eq 'date' || $def->{'type'} eq 'datetime' and length $opts->{$k}
18 0 0 $def->{'type'} eq "file" and length($opts->{$k} // "")
607 18 33 3 exists $def->{'mirror'} and exists $def->{'mirror'}{'value'}
709 6 0 6 $call_offset > 0 and $call_data[0] ne $class
6 0 6 $call_offset > 0 and $call_data[0] ne $class and (caller $call_offset - 1)[0] eq $class
714 0 0 0 $call_offset > 0 and (caller $call_offset - 1)[0] ne $class
743 10 0 0 exists $def->{'type'} && defined $def->{'type'}
0 0 0 $self->_is_object($self->{$f}) and $self->{$f}->isa("Module::Generic::Boolean")
1015 6 0 12 $call_offset > 0 and $call_data[0] ne $class
6 12 0 $call_offset > 0 and $call_data[0] ne $class and (caller $call_offset - 1)[0] eq $class
1021 0 0 0 $call_offset > 0 and (caller $call_offset - 1)[0] ne $class
1096 150 10 92 $enabled and exists $aliases->{$key}

or 2 conditions

line l !l condition
37 6 0 shift @_ || (return $self->error('No hash parameter was provided.'))
45 6 0 $param->{'dictionary'} || (return $self->error('No dictionary was provided to initiate Getopt::Long'))
69 6 0 tie(%options, 'Getopt::Class::Alias', {'dict', $dict, 'aliases', $self->{'aliases'}}) || (return $self->error('Unable to get a Getopt::Class::Alias tie object: ', 'Getopt::Class::Alias'->error))
250 0 0 $opts->{$k2_under} // ""
317 1 0 shift @_ || (return $self->error('No class was provided to return its definition'))
321 1 0 $self->class($class) || (return)
322 1 0 $self->get_class_values($class) || (return)
332 0 4 $def->{'error'} ||= "does not match requirements"
373 4 0 shift @_ || (return $self->error('No class was provided to return its definition'))
430 6 0 $self->getopt || (return $self->error('No Getopt::Long::Parser object found.'))
466 6 0 $self->getopt || (return $self->error('No Getopt::Long object found.'))
470 6 0 tied %$opts || (return $self->error('Unable to get the tie object for the options value hash.'))
537 6 0 'Getopt::Class::Values'->new({'data', $opts, 'dict', $dict, 'aliases', $aliases, 'debug', $self->{'debug'}}) || (return $self->pass_error('Getopt::Class::Values'->error))
544 1 0 shift @_ || (return $self->error('No class was provided to return its definition'))
546 1 0 $self->class($class) || (return)
554 1 3 builtin::reftype($opts->{$f}) // ""
590 0 0 $opts->{$k} // ""
1028 6 0 $bitmask // 0
1030 6 0 $opts->{'dict'} || (return __PACKAGE__->error('No dictionary was provided to Getopt::Class:Alias'))
1062 0 6 $opts->{'debug'} || 0

or 3 conditions

line l !l&&r !l&&!r condition
121 0 0 18 $self->_is_scalar($def->{'default'}) || $self->_is_code($def->{'default'}) || ref $def->{'default'}
212 60 24 0 ref $def->{'default'} || length $def->{'default'}
216 0 0 0 not ref $def->{'default'} or $self->_can_overload($def->{'default'}, "\"\"")
231 24 0 108 $def->{'type'} eq "string" or $def->{'type'} eq "scalar"
6 0 96 $def->{'type'} eq "array" or $def->{'type'} eq "file-array"
6 0 96 $def->{'type'} eq "array" or $def->{'type'} eq "file-array" or $def->{'type'} eq "uri-array"
0 0 6 $def->{'type'} eq "decimal" or $def->{'type'} eq "float"
0 0 6 $def->{'type'} eq "decimal" or $def->{'type'} eq "float" or $def->{'type'} eq "number"
0 6 0 $def->{'type'} eq "date" or $def->{'type'} eq "datetime"
245 6 0 0 exists $def->{'min'} or exists $def->{'max'}
335 0 0 0 $def->{'type'} eq 'hash' || $def->{'type'} eq 'string-hash'
0 0 0 $def->{'type'} =~ /^(?:boolean|decimal|integer|string)/ and not length $v->{$f} or $def->{'type'} eq 'hash' || $def->{'type'} eq 'string-hash' and not scalar keys %{$$v{$f};}
0 0 0 $def->{'type'} =~ /^(?:boolean|decimal|integer|string)/ and not length $v->{$f} or $def->{'type'} eq 'hash' || $def->{'type'} eq 'string-hash' and not scalar keys %{$$v{$f};} or $def->{'type'} eq "array" and not scalar @{$v->{$f};}
492 0 0 0 !(defined $opts->{$key} && length $opts->{$key}) || $opts->{$key} =~ /^[[:blank:]]*$/ || ref $opts->{$key} eq 'SCALAR' && (!length(${$opts->{$key};}) || ${$opts->{$key};} =~ /^[[:blank:]]*$/) || ref $opts->{$key} eq 'ARRAY' && !scalar(@{$opts->{$key};})
587 107 0 25 length $opts->{$k} or $def->{'default'}
590 0 2 105 $def->{'type'} eq 'date' || $def->{'type'} eq 'datetime'
0 6 93 $def->{'type'} eq "hash" or $def->{'type'} eq "string-hash"
14 0 25 $def->{'type'} eq "string" or $def->{'type'} eq "scalar"
7 0 18 $def->{'type'} eq "integer" or $def->{'decimal'}
683 0 6 0 ref $that || $that
693 6 0 0 ref $self || $self
714 6 0 0 $call_data[9] or $call_offset > 0 and (caller $call_offset - 1)[0] ne $class
732 10 0 0 ref $self || $self
743 0 0 0 $def->{'type'} eq "boolean" or $self->_is_object($self->{$f}) and $self->{$f}->isa("Module::Generic::Boolean")
0 0 0 $def->{'type'} eq "string" or $def->{'type'} eq "scalar"
0 0 0 $def->{'type'} eq "string" or $def->{'type'} eq "scalar" or builtin::reftype($self->{$f}) eq "SCALAR"
0 0 0 $def->{'type'} eq "integer" or $def->{'type'} eq "decimal"
0 0 0 $def->{'type'} eq "date" or $def->{'type'} eq "datetime"
0 0 0 $def->{'type'} eq "hash" or $def->{'type'} eq "string-hash"
859 0 6 0 ref $self || $self
876 0 0 0 caller eq "Getopt::Class::Value" or not $self->{'enable'}
891 0 78 1299 caller eq "Getopt::Class::Value" or not $self->{'enable'}
908 0 514 861 caller eq "Getopt::Class::Value" or not $self->{'enable'}
925 0 0 0 caller eq "Getopt::Class::Value" or not $self->{'enable'}
949 0 6 1 caller eq "Getopt::Class::Value" or not $self->{'enable'}
965 0 126 0 caller eq "Getopt::Class::Value" or not $self->{'enable'}
1004 0 6 0 ref $this || $this
1021 0 0 0 $call_data[9] or $call_offset > 0 and (caller $call_offset - 1)[0] ne $class
1045 6 0 0 $opts->{'aliases'} || do {
1099 92 0 0 $aliases->{$key} || do {
1109 92 0 0 $def->{'alias'} || do {