DebugClients/Python/coverage/summary.py

changeset 31
744cd0b4b8cd
parent 0
de9c2efb9d02
child 32
01f04fbc1842
equal deleted inserted replaced
30:9513afbd57f1 31:744cd0b4b8cd
1 """Summary reporting""" 1 """Summary reporting"""
2 2
3 import sys 3 import sys
4 4
5 from report import Reporter 5 from coverage.report import Reporter
6 from coverage.results import Numbers
6 7
7 8
8 class SummaryReporter(Reporter): 9 class SummaryReporter(Reporter):
9 """A reporter for writing the summary report.""" 10 """A reporter for writing the summary report."""
10 11
11 def __init__(self, coverage, show_missing=True, ignore_errors=False): 12 def __init__(self, coverage, show_missing=True, ignore_errors=False):
12 super(SummaryReporter, self).__init__(coverage, ignore_errors) 13 super(SummaryReporter, self).__init__(coverage, ignore_errors)
13 self.show_missing = show_missing 14 self.show_missing = show_missing
15 self.branches = coverage.data.has_arcs()
14 16
15 def report(self, morfs, omit_prefixes=None, outfile=None): 17 def report(self, morfs, omit_prefixes=None, outfile=None):
16 """Writes a report summarizing coverage statistics per module.""" 18 """Writes a report summarizing coverage statistics per module."""
17 19
18 self.find_code_units(morfs, omit_prefixes) 20 self.find_code_units(morfs, omit_prefixes)
19 21
20 # Prepare the formatting strings 22 # Prepare the formatting strings
21 max_name = max([len(cu.name) for cu in self.code_units] + [5]) 23 max_name = max([len(cu.name) for cu in self.code_units] + [5])
22 fmt_name = "%%- %ds " % max_name 24 fmt_name = "%%- %ds " % max_name
23 fmt_err = "%s %s: %s\n" 25 fmt_err = "%s %s: %s\n"
24 header = fmt_name % "Name" + " Stmts Exec Cover\n" 26 header = (fmt_name % "Name") + " Stmts Exec"
25 fmt_coverage = fmt_name + "% 6d % 6d % 5d%%\n" 27 fmt_coverage = fmt_name + "%6d %6d"
28 if self.branches:
29 header += " Branch BrExec"
30 fmt_coverage += " %6d %6d"
31 header += " Cover"
32 fmt_coverage += " %5d%%"
26 if self.show_missing: 33 if self.show_missing:
27 header = header.replace("\n", " Missing\n") 34 header += " Missing"
28 fmt_coverage = fmt_coverage.replace("\n", " %s\n") 35 fmt_coverage += " %s"
29 rule = "-" * (len(header)-1) + "\n" 36 rule = "-" * len(header) + "\n"
37 header += "\n"
38 fmt_coverage += "\n"
30 39
31 if not outfile: 40 if not outfile:
32 outfile = sys.stdout 41 outfile = sys.stdout
33 42
34 # Write the header 43 # Write the header
35 outfile.write(header) 44 outfile.write(header)
36 outfile.write(rule) 45 outfile.write(rule)
37 46
38 total_statements = 0 47 total = Numbers()
39 total_executed = 0 48
40 total_units = 0
41
42 for cu in self.code_units: 49 for cu in self.code_units:
43 try: 50 try:
44 statements, _, missing, readable = self.coverage._analyze(cu) 51 analysis = self.coverage._analyze(cu)
45 n = len(statements) 52 nums = analysis.numbers
46 m = n - len(missing) 53 args = (cu.name, nums.n_statements, nums.n_executed)
47 if n > 0: 54 if self.branches:
48 pc = 100.0 * m / n 55 args += (nums.n_branches, nums.n_executed_branches)
49 else: 56 args += (nums.pc_covered,)
50 pc = 100.0
51 args = (cu.name, n, m, pc)
52 if self.show_missing: 57 if self.show_missing:
53 args = args + (readable,) 58 args += (analysis.missing_formatted(),)
54 outfile.write(fmt_coverage % args) 59 outfile.write(fmt_coverage % args)
55 total_units += 1 60 total += nums
56 total_statements = total_statements + n
57 total_executed = total_executed + m
58 except KeyboardInterrupt: #pragma: no cover 61 except KeyboardInterrupt: #pragma: no cover
59 raise 62 raise
60 except: 63 except:
61 if not self.ignore_errors: 64 if not self.ignore_errors:
62 typ, msg = sys.exc_info()[:2] 65 typ, msg = sys.exc_info()[:2]
63 outfile.write(fmt_err % (cu.name, typ.__name__, msg)) 66 outfile.write(fmt_err % (cu.name, typ.__name__, msg))
64 67
65 if total_units > 1: 68 if total.n_files > 1:
66 outfile.write(rule) 69 outfile.write(rule)
67 if total_statements > 0: 70 args = ("TOTAL", total.n_statements, total.n_executed)
68 pc = 100.0 * total_executed / total_statements 71 if self.branches:
69 else: 72 args += (total.n_branches, total.n_executed_branches)
70 pc = 100.0 73 args += (total.pc_covered,)
71 args = ("TOTAL", total_statements, total_executed, pc)
72 if self.show_missing: 74 if self.show_missing:
73 args = args + ("",) 75 args += ("",)
74 outfile.write(fmt_coverage % args) 76 outfile.write(fmt_coverage % args)

eric ide

mercurial