diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2009-03-12 20:38:55 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2009-03-12 20:38:55 -0400 |
commit | d56b742676743743a7cdfce980f980ea3e3d1857 (patch) | |
tree | c0022f39d561671c35535dc276bd2af1fcb264a6 /coverage/summary.py | |
parent | 3a7944b64a2506a999b1e888f4325b21456ccdfe (diff) | |
download | python-coveragepy-d56b742676743743a7cdfce980f980ea3e3d1857.tar.gz |
Refactor the reporting function into the SummaryReporter class.
Diffstat (limited to 'coverage/summary.py')
-rw-r--r-- | coverage/summary.py | 66 |
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 |