1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- """Summary reporting"""
- import sys
- from coverage.report import Reporter
- from coverage.results import Numbers
- from coverage.misc import NotPython
- class SummaryReporter(Reporter):
- """A reporter for writing the summary report."""
- def __init__(self, coverage, config):
- super(SummaryReporter, self).__init__(coverage, config)
- self.branches = coverage.data.has_arcs()
- def report(self, morfs, outfile=None):
- """Writes a report summarizing coverage statistics per module.
- `outfile` is a file object to write the summary to.
- """
- self.find_code_units(morfs)
- # Prepare the formatting strings
- max_name = max([len(cu.name) for cu in self.code_units] + [5])
- fmt_name = "%%- %ds " % max_name
- fmt_err = "%s %s: %s\n"
- header = (fmt_name % "Name") + " Stmts Miss"
- fmt_coverage = fmt_name + "%6d %6d"
- if self.branches:
- header += " Branch BrMiss"
- fmt_coverage += " %6d %6d"
- width100 = Numbers.pc_str_width()
- header += "%*s" % (width100+4, "Cover")
- fmt_coverage += "%%%ds%%%%" % (width100+3,)
- if self.config.show_missing:
- header += " Missing"
- fmt_coverage += " %s"
- rule = "-" * len(header) + "\n"
- header += "\n"
- fmt_coverage += "\n"
- if not outfile:
- outfile = sys.stdout
- # Write the header
- outfile.write(header)
- outfile.write(rule)
- total = Numbers()
- for cu in self.code_units:
- try:
- analysis = self.coverage._analyze(cu)
- nums = analysis.numbers
- args = (cu.name, nums.n_statements, nums.n_missing)
- if self.branches:
- args += (nums.n_branches, nums.n_missing_branches)
- args += (nums.pc_covered_str,)
- if self.config.show_missing:
- args += (analysis.missing_formatted(),)
- outfile.write(fmt_coverage % args)
- total += nums
- except KeyboardInterrupt: # pragma: not covered
- raise
- except:
- report_it = not self.config.ignore_errors
- if report_it:
- typ, msg = sys.exc_info()[:2]
- if typ is NotPython and not cu.should_be_python():
- report_it = False
- if report_it:
- outfile.write(fmt_err % (cu.name, typ.__name__, msg))
- if total.n_files > 1:
- outfile.write(rule)
- args = ("TOTAL", total.n_statements, total.n_missing)
- if self.branches:
- args += (total.n_branches, total.n_missing_branches)
- args += (total.pc_covered_str,)
- if self.config.show_missing:
- args += ("",)
- outfile.write(fmt_coverage % args)
- return total.pc_covered
|