diff options
Diffstat (limited to 'coverage')
-rw-r--r-- | coverage/control.py | 51 | ||||
-rw-r--r-- | coverage/html.py | 2 | ||||
-rw-r--r-- | coverage/summary.py | 23 |
3 files changed, 48 insertions, 28 deletions
diff --git a/coverage/control.py b/coverage/control.py index c08fda62..ff5aa161 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -363,6 +363,12 @@ class Analysis(object): exec1 = self.parser.first_lines(self.executed) self.missing = sorted(set(self.statements) - set(exec1)) + self.numbers = Numbers() + self.numbers.n_files = 1 + self.numbers.n_statements = len(self.statements) + self.numbers.n_excluded = len(self.excluded) + self.numbers.n_missing = len(self.missing) + def missing_formatted(self): """The missing line numbers, formatted nicely. @@ -371,17 +377,6 @@ class Analysis(object): """ return format_lines(self.statements, self.missing) - def percent_covered(self): - """Returns a single percentage value for coverage.""" - n_stm = len(self.statements) - n_mis = len(self.missing) - n_run = n_stm - n_mis - if n_stm > 0: - pc_cov = 100.0 * n_run / n_stm - else: - pc_cov = 100.0 - return pc_cov - def has_arcs(self): """Were arcs measured in this result?""" return self.coverage.data.has_arcs() @@ -442,3 +437,37 @@ class Analysis(object): mba[l1] = [] mba[l1].append(l2) return mba + + +class Numbers(object): + """The numerical results of measuring coverage. + + This holds the basic statistics from `Analysis`, and is used to roll + up statistics across files. + + """ + def __init__(self): + self.n_files = 0 + self.n_statements = 0 + self.n_excluded = 0 + self.n_missing = 0 + + def _get_n_run(self): + return self.n_statements - self.n_missing + n_run = property(_get_n_run) + + def _get_percent_covered(self): + """Returns a single percentage value for coverage.""" + if self.n_statements > 0: + pc_cov = 100.0 * self.n_run / self.n_statements + else: + pc_cov = 100.0 + return pc_cov + percent_covered = property(_get_percent_covered) + + def __iadd__(self, other): + self.n_files += other.n_files + self.n_statements += other.n_statements + self.n_excluded += other.n_excluded + self.n_missing += other.n_missing + return self diff --git a/coverage/html.py b/coverage/html.py index 59bc995e..c653cf9c 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -93,7 +93,7 @@ class HtmlReporter(Reporter): n_exc = len(analysis.excluded) n_mis = len(analysis.missing) n_run = n_stm - n_mis - pc_cov = analysis.percent_covered() + pc_cov = analysis.numbers.percent_covered missing_branch_arcs = analysis.missing_branch_arcs() n_par = 0 # accumulated below. diff --git a/coverage/summary.py b/coverage/summary.py index 2a693b82..08e74b38 100644 --- a/coverage/summary.py +++ b/coverage/summary.py @@ -15,6 +15,7 @@ class SummaryReporter(Reporter): def report(self, morfs, omit_prefixes=None, outfile=None): """Writes a report summarizing coverage statistics per module.""" + from coverage.control import Numbers self.find_code_units(morfs, omit_prefixes) # Prepare the formatting strings @@ -35,23 +36,17 @@ class SummaryReporter(Reporter): outfile.write(header) outfile.write(rule) - total_statements = 0 - total_executed = 0 - total_units = 0 + total = Numbers() for cu in self.code_units: try: analysis = self.coverage._analyze(cu) - n = len(analysis.statements) - m = n - len(analysis.missing) - pc = analysis.percent_covered() - args = (cu.name, n, m, pc) + nums = analysis.numbers + args = (cu.name, nums.n_statements, nums.n_run, nums.percent_covered) if self.show_missing: args = args + (analysis.missing_formatted(),) outfile.write(fmt_coverage % args) - total_units += 1 - total_statements = total_statements + n - total_executed = total_executed + m + total += nums except KeyboardInterrupt: #pragma: no cover raise except: @@ -59,13 +54,9 @@ class SummaryReporter(Reporter): typ, msg = sys.exc_info()[:2] outfile.write(fmt_err % (cu.name, typ.__name__, msg)) - if total_units > 1: + if total.n_files > 1: outfile.write(rule) - if total_statements > 0: - pc = 100.0 * total_executed / total_statements - else: - pc = 100.0 - args = ("TOTAL", total_statements, total_executed, pc) + args = ("TOTAL", total.n_statements, total.n_run, total.percent_covered) if self.show_missing: args = args + ("",) outfile.write(fmt_coverage % args) |