summaryrefslogtreecommitdiff
path: root/coverage/summary.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-03-12 20:38:55 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-03-12 20:38:55 -0400
commitd56b742676743743a7cdfce980f980ea3e3d1857 (patch)
treec0022f39d561671c35535dc276bd2af1fcb264a6 /coverage/summary.py
parent3a7944b64a2506a999b1e888f4325b21456ccdfe (diff)
downloadpython-coveragepy-d56b742676743743a7cdfce980f980ea3e3d1857.tar.gz
Refactor the reporting function into the SummaryReporter class.
Diffstat (limited to 'coverage/summary.py')
-rw-r--r--coverage/summary.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/coverage/summary.py b/coverage/summary.py
new file mode 100644
index 0000000..011c07e
--- /dev/null
+++ b/coverage/summary.py
@@ -0,0 +1,66 @@
+"""Summary reporting"""
+
+import sys
+
+from coverage.codeunit import code_unit_factory
+
+class SummaryReporter:
+ """A reporter for writing the summary report."""
+
+ def __init__(self, coverage, show_missing=True, ignore_errors=False):
+ self.cov = coverage
+ self.show_missing = show_missing
+ self.ignore_errors = ignore_errors
+
+ def report(self, morfs, omit_prefixes=None, outfile=None):
+ """Writes a report summarizing coverage statistics per module."""
+
+ morfs = morfs or self.cov.data.executed_files()
+ code_units = code_unit_factory(morfs, self.cov.file_locator, omit_prefixes)
+ code_units.sort()
+
+ max_name = max(5, max(map(lambda cu: len(cu.name), code_units)))
+ fmt_name = "%%- %ds " % max_name
+ fmt_err = fmt_name + "%s: %s"
+ header = fmt_name % "Name" + " Stmts Exec Cover"
+ fmt_coverage = fmt_name + "% 6d % 6d % 5d%%"
+ if self.show_missing:
+ header = header + " Missing"
+ fmt_coverage = fmt_coverage + " %s"
+ if not outfile:
+ outfile = sys.stdout
+ print >>outfile, header
+ print >>outfile, "-" * len(header)
+ total_statements = 0
+ total_executed = 0
+ for cu in code_units:
+ try:
+ _, statements, _, missing, readable = self.cov.analyze(cu)
+ n = len(statements)
+ m = n - len(missing)
+ if n > 0:
+ pc = 100.0 * m / n
+ else:
+ pc = 100.0
+ args = (cu.name, n, m, pc)
+ if self.show_missing:
+ args = args + (readable,)
+ print >>outfile, fmt_coverage % args
+ total_statements = total_statements + n
+ total_executed = total_executed + m
+ except KeyboardInterrupt: #pragma: no cover
+ raise
+ except:
+ if not self.ignore_errors:
+ typ, msg = sys.exc_info()[:2]
+ print >>outfile, fmt_err % (cu.name, typ, msg)
+ if len(code_units) > 1:
+ print >>outfile, "-" * len(header)
+ if total_statements > 0:
+ pc = 100.0 * total_executed / total_statements
+ else:
+ pc = 100.0
+ args = ("TOTAL", total_statements, total_executed, pc)
+ if self.show_missing:
+ args = args + ("",)
+ print >>outfile, fmt_coverage % args