summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <nedbat@gmail.com>2015-08-15 07:42:34 -0400
committerNed Batchelder <nedbat@gmail.com>2015-08-15 07:42:34 -0400
commit40121d5bfc8992653a530bc2dd10117d9f837d03 (patch)
treee009ec35a5edfdb38fa1a68d853afd4b1d9de91e
parent89ae94a44a9fc5ecbfcda575f0a9db3e6922a45f (diff)
parent8a7964a2d2a4eec7fbd369aecdd6c01caa34092f (diff)
downloadpython-coveragepy-git-40121d5bfc8992653a530bc2dd10117d9f837d03.tar.gz
Merged in garar/coverage.py (pull request #66)
Do not raise an exception for empty summary when using skip_covered.
-rw-r--r--.hgignore1
-rw-r--r--coverage/summary.py11
-rw-r--r--tests/test_summary.py48
3 files changed, 55 insertions, 5 deletions
diff --git a/.hgignore b/.hgignore
index c13de37d..9395c00e 100644
--- a/.hgignore
+++ b/.hgignore
@@ -15,6 +15,7 @@ syntax: glob
# Stuff generated by editors.
.idea/
+.vimtags
# Stuff in the root.
build
diff --git a/coverage/summary.py b/coverage/summary.py
index 46aa4f5c..a90803d6 100644
--- a/coverage/summary.py
+++ b/coverage/summary.py
@@ -29,6 +29,9 @@ class SummaryReporter(Reporter):
max_name = max([len(fr.relative_filename()) for fr in self.file_reporters] + [5])
fmt_name = "%%- %ds " % max_name
fmt_err = "%s %s: %s\n"
+ fmt_skip_covered = ("\n%s file%s skipped because of 'skip covered' "
+ "option.\n")
+
header = (fmt_name % "Name") + " Stmts Miss"
fmt_coverage = fmt_name + "%6d %6d"
if self.branches:
@@ -52,6 +55,7 @@ class SummaryReporter(Reporter):
outfile.write(rule)
total = Numbers()
+ skipped_count = 0
for fr in self.file_reporters:
try:
@@ -63,6 +67,7 @@ class SummaryReporter(Reporter):
no_missing_lines = (nums.n_missing == 0)
no_missing_branches = (nums.n_partial_branches == 0)
if no_missing_lines and no_missing_branches:
+ skipped_count += 1
continue
args = (fr.relative_filename(), nums.n_statements, nums.n_missing)
@@ -100,6 +105,10 @@ class SummaryReporter(Reporter):
if self.config.show_missing:
args += ("",)
outfile.write(fmt_coverage % args)
- if not total.n_files:
+ if not total.n_files and not skipped_count:
raise CoverageException("No data to report.")
+ if self.config.skip_covered and skipped_count:
+ outfile.write(
+ fmt_skip_covered % (skipped_count,
+ 's' if skipped_count > 1 else ''))
return total.n_statements and total.pc_covered
diff --git a/tests/test_summary.py b/tests/test_summary.py
index 5f553567..90869948 100644
--- a/tests/test_summary.py
+++ b/tests/test_summary.py
@@ -258,14 +258,16 @@ class SummaryTest(CoverageTest):
# Name Stmts Miss Cover
# ------------------------------------
# not_covered.py 2 1 50%
+ #
+ # 1 file skipped because of 'skip covered' option.
- self.assertEqual(self.line_count(report), 3, report)
+ self.assertEqual(self.line_count(report), 5, report)
squeezed = self.squeezed_lines(report)
self.assertEqual(squeezed[2], "not_covered.py 2 1 50%")
def test_report_skip_covered_branches(self):
self.make_file("main.py", """
- import not_covered
+ import not_covered, covered
def normal(z):
if z:
@@ -279,6 +281,11 @@ class SummaryTest(CoverageTest):
print("n")
not_covered(True)
""")
+ self.make_file("covered.py", """
+ def foo():
+ pass
+ foo()
+ """)
out = self.run_command("coverage run --branch main.py")
self.assertEqual(out, "n\nz\n")
report = self.report_from_command("coverage report --skip-covered")
@@ -286,8 +293,10 @@ class SummaryTest(CoverageTest):
# Name Stmts Miss Branch BrPart Cover
# --------------------------------------------------
# not_covered.py 4 0 2 1 83%
+ #
+ # 2 files skipped because of 'skip covered' option.
- self.assertEqual(self.line_count(report), 3, report)
+ self.assertEqual(self.line_count(report), 5, report)
squeezed = self.squeezed_lines(report)
self.assertEqual(squeezed[2], "not_covered.py 4 0 2 1 83%")
@@ -322,12 +331,43 @@ class SummaryTest(CoverageTest):
# not_covered.py 4 0 2 1 83%
# --------------------------------------------------
# TOTAL 6 1 2 1 75%
+ #
+ # 1 file skipped because of 'skip covered' option.
- self.assertEqual(self.line_count(report), 6, report)
+ self.assertEqual(self.line_count(report), 8, report)
squeezed = self.squeezed_lines(report)
self.assertEqual(squeezed[2], "also_not_run.py 2 1 0 0 50%")
self.assertEqual(squeezed[3], "not_covered.py 4 0 2 1 83%")
self.assertEqual(squeezed[5], "TOTAL 6 1 2 1 75%")
+ self.assertEqual(squeezed[7],
+ "1 file skipped because of 'skip covered' option.")
+
+ def test_report_skip_covered_all_files_covered(self):
+ self.make_file("main.py", """
+ def foo():
+ pass
+ foo()
+ """)
+ out = self.run_command("coverage run --branch main.py")
+ self.assertEqual(out, "")
+ report = self.report_from_command("coverage report --skip-covered")
+ # Name Stmts Miss Branch BrPart Cover
+ # -------------------------------------------
+ #
+ # 1 file skipped because of 'skip covered' option.
+ self.assertEqual(self.line_count(report), 4, report)
+ squeezed = self.squeezed_lines(report)
+ self.assertEqual(squeezed[3],
+ "1 file skipped because of 'skip covered' option.")
+
+ def test_report_skip_covered_no_data(self):
+ report = self.report_from_command("coverage report --skip-covered")
+ # Name Stmts Miss Branch BrPart Cover
+ # -------------------------------------------
+ # No data to report.
+ self.assertEqual(self.line_count(report), 3, report)
+ squeezed = self.squeezed_lines(report)
+ self.assertEqual(squeezed[2], "No data to report.")
def test_dotpy_not_python(self):
# We run a .py file, and when reporting, we can't parse it as Python.