summaryrefslogtreecommitdiff
path: root/coverage/results.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2011-05-17 10:06:40 -0400
committerNed Batchelder <ned@nedbatchelder.com>2011-05-17 10:06:40 -0400
commit34413aab8a61579789faa342331ac9c8a55ee5a4 (patch)
tree47850ea0d7622978a1ea2484f1d5955364896076 /coverage/results.py
parent6754971e7ef16e5cee60ae5532de8f6069768ce8 (diff)
downloadpython-coveragepy-git-34413aab8a61579789faa342331ac9c8a55ee5a4.tar.gz
WIP for partial branch exclusion. #113
Diffstat (limited to 'coverage/results.py')
-rw-r--r--coverage/results.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/coverage/results.py b/coverage/results.py
index a7ec0fdc..d92b503c 100644
--- a/coverage/results.py
+++ b/coverage/results.py
@@ -3,7 +3,7 @@
import os
from coverage.backward import set, sorted # pylint: disable=W0622
-from coverage.misc import format_lines, NoSource
+from coverage.misc import format_lines, join_regex, NoSource
from coverage.parser import CodeParser
@@ -35,11 +35,16 @@ class Analysis(object):
self.missing = sorted(set(self.statements) - set(exec1))
if self.coverage.data.has_arcs():
+ self.no_branch = self.parser.lines_matching(
+ join_regex(self.coverage.config.partial_list),
+ join_regex(self.coverage.config.partial_always_list)
+ )
n_branches = self.total_branches()
mba = self.missing_branch_arcs()
n_missing_branches = sum([len(v) for v in mba.values()])
else:
n_branches = n_missing_branches = 0
+ self.no_branch = set()
self.numbers = Numbers(
n_files=1,
@@ -64,7 +69,10 @@ class Analysis(object):
def arc_possibilities(self):
"""Returns a sorted list of the arcs in the code."""
- return self.parser.arcs()
+ arcs = self.parser.arcs()
+ if self.no_branch:
+ arcs = [(a,b) for (a,b) in arcs if a not in self.no_branch]
+ return arcs
def arcs_executed(self):
"""Returns a sorted list of the arcs actually executed in the code."""
@@ -89,7 +97,9 @@ class Analysis(object):
# trouble, and here is where it's the least burden to remove them.
unpredicted = [
e for e in executed
- if e not in possible and e[0] != e[1]
+ if e not in possible
+ and e[0] != e[1]
+ and e[0] not in self.no_branch
]
return sorted(unpredicted)
@@ -193,8 +203,9 @@ class Numbers(object):
def _get_pc_covered_str(self):
"""Returns the percent covered, as a string, without a percent sign.
- The important thing here is that "0" only be returned when it's truly
- zero, and "100" only be returned when it's truly 100.
+ Note that "0" is only returned when the value is truly zero, and "100"
+ is only returned when the value is truly 100. Rounding can never
+ result in either "0" or "100".
"""
pc = self.pc_covered