diff options
author | Ned Batchelder <nedbat@gmail.com> | 2014-06-01 21:07:27 -0400 |
---|---|---|
committer | Ned Batchelder <nedbat@gmail.com> | 2014-06-01 21:07:27 -0400 |
commit | 4015f0c26cab47f82fd9882ab8c9bf5d29ae7ca0 (patch) | |
tree | 0a2a92253455650e28b10178feae955cc58a5c2c | |
parent | 12e05dbdbedea2c668ce90cb19da34476dccaca8 (diff) | |
parent | 232b546e7325be1626f940e5358fe468f3f06872 (diff) | |
download | python-coveragepy-git-4015f0c26cab47f82fd9882ab8c9bf5d29ae7ca0.tar.gz |
Merged in rdn_/coverage.py (pull request #35)
Add branch misses to stdout report
-rw-r--r-- | AUTHORS.txt | 1 | ||||
-rw-r--r-- | coverage/results.py | 16 | ||||
-rw-r--r-- | coverage/summary.py | 10 | ||||
-rw-r--r-- | tests/test_summary.py | 76 |
4 files changed, 102 insertions, 1 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt index d7e2d276..a30f377f 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -43,3 +43,4 @@ Sigve Tjora Mark van der Wal Zooko Wilcox-O'Hearn Christoph Zwerschke +Steve Leonard diff --git a/coverage/results.py b/coverage/results.py index ce9e0fa4..94785ca0 100644 --- a/coverage/results.py +++ b/coverage/results.py @@ -83,6 +83,22 @@ class Analysis(object): ) return sorted(missing) + def arcs_missing_formatted(self): + """ The missing branch arcs, formatted. + + Returns a string like "1->2, 1->3, 16->20" + + """ + arcs = self.missing_branch_arcs() + line_exits = sorted(arcs.iteritems(), key=lambda (x, _): x) + pairs = [] + for line, exits in line_exits: + exits = sorted(exits) + for exit in exits: + pair = '%d->%d' % (line, exit) + pairs.append(pair) + return ', '.join(pairs) + def arcs_unpredicted(self): """Returns a sorted list of the executed arcs missing from the code.""" possible = self.arc_possibilities() diff --git a/coverage/summary.py b/coverage/summary.py index c99c5303..1e55a7d4 100644 --- a/coverage/summary.py +++ b/coverage/summary.py @@ -37,6 +37,8 @@ class SummaryReporter(Reporter): if self.config.show_missing: header += " Missing" fmt_coverage += " %s" + if self.branches: + fmt_coverage += "%sBranches: %s" rule = "-" * len(header) + "\n" header += "\n" fmt_coverage += "\n" @@ -59,7 +61,13 @@ class SummaryReporter(Reporter): args += (nums.n_branches, nums.n_missing_branches) args += (nums.pc_covered_str,) if self.config.show_missing: - args += (analysis.missing_formatted(),) + missing_fmtd = analysis.missing_formatted() + args += (missing_fmtd,) + if self.branches: + separator = "" + if missing_fmtd: + separator = ", " + args += (separator, analysis.arcs_missing_formatted(),) outfile.write(fmt_coverage % args) total += nums except KeyboardInterrupt: # pragma: not covered diff --git a/tests/test_summary.py b/tests/test_summary.py index 79e32169..88be7761 100644 --- a/tests/test_summary.py +++ b/tests/test_summary.py @@ -142,6 +142,82 @@ class SummaryTest(CoverageTest): self.assertEqual(self.last_line_squeezed(report), "mybranch 5 0 2 1 86%") + def test_report_show_missing(self): + self.make_file("mymissing.py", """\ + def missing(x, y): + if x: + print("x") + return x + if y: + print("y") + return x + return y + missing(0, 1) + """) + out = self.run_command("coverage run mymissing.py") + self.assertEqual(out, 'y\n') + report = self.report_from_command("coverage report --show-missing") + + # Name Stmts Miss Cover Missing + # ----------------------------------------- + # mymissing 9 3 67% 3-4, 8 + + self.assertEqual(self.line_count(report), 3) + self.assertIn("mymissing ", report) + self.assertEqual(self.last_line_squeezed(report), + "mymissing 9 3 67% 3-4, 8") + + def test_report_show_missing_branches(self): + self.make_file("mybranch.py", """\ + def branch(x, y): + if x: + print("x") + if y: + print("y") + return x + branch(1, 1) + """) + out = self.run_command("coverage run --branch mybranch.py") + self.assertEqual(out, 'x\ny\n') + report = self.report_from_command("coverage report --show-missing") + + # Name Stmts Miss Branch BrMiss Cover Missing + # ------------------------------------------------------- + # mybranch 7 0 4 2 82% Branches: 2->4, 4->6 + + self.assertEqual(self.line_count(report), 3) + self.assertIn("mybranch ", report) + self.assertEqual(self.last_line_squeezed(report), + "mybranch 7 0 4 2 82% Branches: 2->4, 4->6") + + def test_report_show_missing_branches_and_lines(self): + self.make_file("mybranch.py", """\ + def branch(x, y, z): + if x: + print("x") + if y: + print("y") + if z: + if x and y: + print("z") + return x + branch(1, 1, 0) + """) + out = self.run_command("coverage run --branch mybranch.py") + self.assertEqual(out, 'x\ny\n') + report = self.report_from_command("coverage report --show-missing") + + # pylint: disable=C0301 + # Name Stmts Miss Branch BrMiss Cover Missing + # ------------------------------------------------------- + # mybranch 10 2 8 5 61% 7-8, Branches: 2->4, 4->6, 6->7, 7->8, 7->9 + + self.assertEqual(self.line_count(report), 3) + self.assertIn("mybranch ", report) + self.assertEqual(self.last_line_squeezed(report), + "mybranch 10 2 8 5 61% " + "7-8, Branches: 2->4, 4->6, 6->7, 7->8, 7->9") + def test_dotpy_not_python(self): # We run a .py file, and when reporting, we can't parse it as Python. # We should get an error message in the report. |