Branch Coverage

lib/XML/DOM/Lite/XPath.pm
Criterion Covered Total %
branch 115 290 39.6


line true false branch
19 60 3 $parent ? :
29 49 11 defined $node ? :
34 26 defined $position ? :
32 28 defined $nodelist ? :
39 0 0 if (defined $self->{'variables'}{'name'}) { }
0 0 elsif ($self->{'parent'}) { }
99 0 0 $_[0]{'value'} ? :
141 0 1 if (@{$_[0]{'value'};} == 0) { }
191 4 9 if ($self->{'absolute'}) { }
210 10 7 if ($step == @$steps - 1) { }
255 0 20 if ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'ANCESTOR_OR_SELF'}) { }
0 20 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'ANCESTOR'}) { }
2 18 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'ATTRIBUTE'}) { }
14 4 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'CHILD'}) { }
1 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'DESCENDANT_OR_SELF'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'DESCENDANT'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'FOLLOWING'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'FOLLOWING_SIBLING'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'NAMESPACE'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'PARENT'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'PRECEDING'}) { }
0 3 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'PRECEDING_SIBLING'}) { }
3 0 elsif ($self->{'axis'} eq $XML::DOM::Lite::XPath::StepExpr::xpathAxis->{'SELF'}) { }
296 0 0 if ($input->parentNode)
324 17 5 if ($self->{'nodetest'}->evaluate($ctx->clone($n, $i, $nodelist0))->booleanValue)
334 2 0 if ($self->{'predicate'}[$i]->evaluate($ctx->clone($n, $ii, $nodelist0))->booleanValue)
433 0 2 if ($v->{'type'} eq 'number') { }
456 0 0 if ($f) { }
468 0 0 unless $b
498 0 0 if ($e->{'type'} eq 'node-set') { }
510 0 0 if ($n)
529 0 0 if (@{$self->{'args'};} == 0) { }
535 0 0 if (@$n == 0) { }
545 0 0 if (@{$self->{'args'};} == 0) { }
584 0 0 if ($i == -1) { }
599 0 0 if ($i == -1) { }
613 0 0 if (@{$self->{'args'};} == 2) { }
614 0 0 0 <=> round($s1 - 1) ? :
620 0 0 0 <=> $i0 ? :
621 0 0 round('%d', $s2) - (0 <=> -$i0) ? :
630 0 0 if (@{$self->{'args'};} > 0) { }
641 0 0 if (@{$self->{'args'};} > 0) { }
700 0 0 if ($xmllang)
705 0 0 if (not $xmllang) { }
717 0 0 if (@{$self->{'args'};} == 1) { }
763 0 0 if ($ret)
774 0 0 if ($self->{'args'}[0]->evaluate($ctx)->booleanValue) { }
817 0 0 if ($nodes1->[$i1] == $nodes2->[$i2])
857 0 0 if ($self->{'predicate'}[$i]->evaluate($ctx->clone($n, $j, $nodes0))->booleanValue)
887 0 2 if ($o eq 'or') { }
0 2 elsif ($o eq 'and') { }
0 2 elsif ($o eq '+') { }
0 2 elsif ($o eq '-') { }
0 2 elsif ($o eq '*') { }
0 2 elsif ($o eq 'mod') { }
0 2 elsif ($o eq 'div') { }
2 0 elsif ($o eq '=') { }
0 0 elsif ($o eq '!=') { }
0 0 elsif ($o eq '<') { }
0 0 elsif ($o eq '<=') { }
0 0 elsif ($o eq '>') { }
0 0 elsif ($o eq '>=') { }
932 0 2 if ($v1->{'type'} eq 'node-set' and $v2->{'type'} eq 'node-set') { }
2 0 elsif ($v1->{'type'} eq 'node-set' or $v2->{'type'} eq 'node-set') { }
0 0 elsif ($v1->{'type'} eq 'boolean' or $v2->{'type'} eq 'boolean') { }
0 0 elsif ($v1->{'type'} eq 'number' or $v2->{'type'} eq 'number') { }
938 0 0 if (XML::DOM::Lite::XPath::xmlValue($n1->[$i1]) cmp XML::DOM::Lite::XPath::xmlValue($n2->[$i2]))
948 0 2 if ($v1->{'type'} eq 'number') { }
0 2 elsif ($v2->{'type'} eq 'number') { }
0 2 elsif ($v1->{'type'} eq 'string') { }
2 0 elsif ($v2->{'type'} eq 'string') { }
955 0 0 if ($s cmp $nn)
968 0 0 if ($nn cmp $s)
981 0 0 if ($s cmp $nn)
994 2 0 if ($nn cmp $s)
1383 2 0 if ($ctx->nodeType)
1392 0 9 if $DEBUG
1396 4 5 if ($cached)
1397 0 4 if $DEBUG
1400 0 5 if ($expr =~ /^(\$|@)?\w+$/i)
1403 0 0 if $DEBUG
1407 1 4 if ($expr =~ m[^\w+(/\w+)*$]i)
1410 0 1 if $DEBUG
1436 18 421 if (@result and length $result[0] > length $match)
1443 0 0 if ($rule and $rule == $TOK_DIV || $rule == $TOK_MOD || $rule == $TOK_AND || $rule == $TOK_OR and !$previous || $previous->{'tag'} == $TOK_AT || $previous->{'tag'} == $TOK_DSLASH || $previous->{'tag'} == $TOK_SLASH || $previous->{'tag'} == $TOK_AXIS || $previous->{'tag'} == $TOK_DOLLAR)
1457 18 4 if ($rule) { }
1459 0 18 if $DEBUG
1463 12 6 $rule->{'prec'} ? :
1468 0 4 if $DEBUG
1474 0 59 if $DEBUG
1478 0 4 if $DEBUG
1480 0 4 if (@$stack != 1)
1487 0 4 if $DEBUG
1501 77 4 if (@$stack)
1504 71 6 if ($ruleset)
1507 63 175 if (@$match)
1521 59 22 if ($cand and !$ahead || $cand->{'prec'} > $ahead->{'prec'} || $ahead->{'tag'}{'left'} && $cand->{'prec'} >= $ahead->{'prec'}) { }
1531 0 0 $ahead->{'tag'}{'left'} ? :
0 0 $ahead ? :
0 59 if $DEBUG
1541 18 4 if ($ahead)
1545 0 0 $ahead->{'tag'}{'left'} ? :
0 0 $cand ? :
0 18 if $DEBUG
1565 4 355 if ($pattern->[$p] == $Q_MM) { }
0 355 elsif ($pattern->[$p] == $Q_01) { }
0 355 elsif ($pattern->[$p] == $Q_1M) { }
256 99 elsif ($stack->[$s]{'tag'} == $pattern->[$p]) { }
1586 0 0 if ($stack->[$s]{'tag'} == $pattern->[$p]) { }
1611 63 76 if ($p == -1) { }
1628 63 0 if ($frame->{'rule'}) { }
0 0 elsif ($frame->{'tag'}) { }
0 0 elsif (ref $frame eq 'ARRAY' and @$frame) { }
1629 59 4 if (@{$frame->{'rule'};} >= 3 and $frame->{'rule'}[2] >= 0) { }
1651 2 6 if ($_[0] > $_[1]) { }
1657 0 0 if ($ret)
1755 1 2 if ($abbrev eq '//') { }
2 0 elsif ($abbrev eq '.') { }
0 0 elsif ($abbrev eq '..') { }
1782 0 0 if ($type eq 'node') { }
0 0 elsif ($type eq 'text') { }
0 0 elsif ($type eq 'comment') { }
0 0 elsif ($type eq 'processing-instruction') { }
1796 0 0 if ($type ne 'processing-instruction')
1850 0 2 if (@$predicates > 0) { }
1885 0 0 if (substr($expr, 0, 1) eq '$') { }
0 0 elsif (substr($expr, 0, 1) eq '@') { }
0 0 elsif ($expr =~ /^[0-9]+$/) { }
1917 6 3 if (@$xpathRules)
1933 0 3 if $DEBUG
1937 78 93 unless $array->[$position]
1946 0 171 if ($pattern->[$j] == $Q_1M) { }
3 168 elsif ($pattern->[$j] == $Q_MM or $pattern->[$j] == $Q_01) { }
1961 0 3 if $DEBUG
1964 78 72 if ($_)
1966 0 3 if $DEBUG
1995 2 0 unless @$sort
2009 0 0 if ($s->{'type'} eq 'text') { }
0 0 elsif ($s->{'type'} eq 'number') { }
2035 0 0 $v1->{'key'}[$i]{'order'} eq 'descending' ? :
2036 0 0 if ($v1->{'key'}[$i]{'value'} > $v2->{'key'}[$i]{'value'}) { }
0 0 elsif ($v1->{'key'}[$i]{'value'} < $v2->{'key'}[$i]{'value'}) { }
2048 0 4 unless $node
2051 3 1 if ($node->{'nodeType'} == 3 or $node->{'nodeType'} == 4 or $node->{'nodeType'} == 2) { }
1 0 elsif ($node->{'nodeType'} == 1 or $node->{'nodeType'} == 9 or $node->{'nodeType'} == 11) { }