diff options
-rw-r--r-- | AUTHORS.txt | 1 | ||||
-rw-r--r-- | CHANGES.txt | 4 | ||||
-rw-r--r-- | coverage/cmdline.py | 2 | ||||
-rw-r--r-- | coverage/summary.py | 14 | ||||
-rw-r--r-- | tests/test_cmdline.py | 2 | ||||
-rw-r--r-- | tests/test_summary.py | 50 |
6 files changed, 58 insertions, 15 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt index f2862633..05794483 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -26,6 +26,7 @@ Christian Heimes Roger Hu Stan Hu Devin Jeanpierre +Krystian Kichewko Ross Lawley Steve Leonard Edward Loper diff --git a/CHANGES.txt b/CHANGES.txt index 9df12fe2..3974a46e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,10 @@ Latest - The original command line switches (`-x` to run a program, etc) are no longer supported. +- A new option: `coverage report --skip-covered` will reduce the number of + files reported by skipping files with 100% coverage. Thanks, Krystian + Kichewko. + - The ``COVERAGE_OPTIONS`` environment variable is no longer supported. It was a hack for ``--timid`` before configuration files were available. diff --git a/coverage/cmdline.py b/coverage/cmdline.py index f776950a..3e3f7e44 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -63,7 +63,7 @@ class Opts(object): "executed." ) skip_covered = optparse.make_option( - '-s', '--skip-covered', action='store_true', + '--skip-covered', action='store_true', help="Skip files with 100% coverage." ) omit = optparse.make_option( diff --git a/coverage/summary.py b/coverage/summary.py index c9877658..33aa017f 100644 --- a/coverage/summary.py +++ b/coverage/summary.py @@ -54,9 +54,17 @@ class SummaryReporter(Reporter): try: analysis = self.coverage._analyze(cu) nums = analysis.numbers - if self.config.skip_covered and nums.n_missing == 0 and \ - (not self.branches or nums.n_partial_branches == 0): - continue + + if self.config.skip_covered: + # Don't report on 100% files. + no_missing_lines = (nums.n_missing == 0) + if self.branches: + no_missing_branches = (nums.n_partial_branches == 0) + else: + no_missing_branches = True + if no_missing_lines and no_missing_branches: + continue + args = (cu.name, nums.n_statements, nums.n_missing) if self.branches: args += (nums.n_branches, nums.n_partial_branches) diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py index b7ab81e6..e0d10867 100644 --- a/tests/test_cmdline.py +++ b/tests/test_cmdline.py @@ -347,7 +347,7 @@ class CmdLineTest(BaseCmdLineTest): .load() .report(morfs=["mod1", "mod2", "mod3"]) """) - self.cmd_executes("report -s", """\ + self.cmd_executes("report --skip-covered", """\ .coverage() .load() .report(skip_covered=True) diff --git a/tests/test_summary.py b/tests/test_summary.py index cf255e51..21817a52 100644 --- a/tests/test_summary.py +++ b/tests/test_summary.py @@ -239,17 +239,13 @@ class SummaryTest(CoverageTest): self.assertEqual(out, "z\n") report = self.report_from_command("coverage report --skip-covered") - # pylint: disable=C0301 # Name Stmts Miss Cover # --------------------------------- # not_covered 2 1 50% self.assertEqual(self.line_count(report), 3, report) squeezed = self.squeezed_lines(report) - self.assertEqual( - squeezed[2], - "not_covered 2 1 50%" - ) + self.assertEqual(squeezed[2], "not_covered 2 1 50%") def test_report_skip_covered_branches(self): self.make_file("main.py", """ @@ -271,17 +267,51 @@ class SummaryTest(CoverageTest): self.assertEqual(out, "n\nz\n") report = self.report_from_command("coverage report --skip-covered") - # pylint: disable=C0301 # Name Stmts Miss Branch BrPart Cover # ----------------------------------------------- # not_covered 4 0 2 1 83% self.assertEqual(self.line_count(report), 3, report) squeezed = self.squeezed_lines(report) - self.assertEqual( - squeezed[2], - "not_covered 4 0 2 1 83%" - ) + self.assertEqual(squeezed[2], "not_covered 4 0 2 1 83%") + + def test_report_skip_covered_branches_with_totals(self): + self.make_file("main.py", """ + import not_covered + import also_not_run + + def normal(z): + if z: + print("z") + normal(True) + normal(False) + """) + self.make_file("not_covered.py", """ + def not_covered(n): + if n: + print("n") + not_covered(True) + """) + self.make_file("also_not_run.py", """ + def does_not_appear_in_this_film(ni): + print("Ni!") + """) + out = self.run_command("coverage run --branch main.py") + self.assertEqual(out, "n\nz\n") + report = self.report_from_command("coverage report --skip-covered") + + # Name Stmts Miss Branch BrPart Cover + # ----------------------------------------------- + # also_not_run 2 1 0 0 50% + # not_covered 4 0 2 1 83% + # ----------------------------------------------- + # TOTAL 6 1 2 1 75% + + self.assertEqual(self.line_count(report), 6, report) + squeezed = self.squeezed_lines(report) + self.assertEqual(squeezed[2], "also_not_run 2 1 0 0 50%") + self.assertEqual(squeezed[3], "not_covered 4 0 2 1 83%") + self.assertEqual(squeezed[5], "TOTAL 6 1 2 1 75%") def test_dotpy_not_python(self): # We run a .py file, and when reporting, we can't parse it as Python. |