summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-06-24 22:29:21 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-06-24 22:29:21 -0400
commitfb6e6e13ccd059a6bfe7998e43a56fbeb3d5864f (patch)
tree1cf46a007c98702467c8b762ddc175f5314d9b81
parent663f44e94c22f8ac889a1d7608e6ab0e3cbf9ad3 (diff)
downloadpython-coveragepy-git-fb6e6e13ccd059a6bfe7998e43a56fbeb3d5864f.tar.gz
Don't measure the coverage package itself. Inspired by, but does not fix, issue #8.
-rw-r--r--coverage/control.py13
-rw-r--r--test/coverage_coverage.py4
-rw-r--r--test/test_coverage.py20
3 files changed, 28 insertions, 9 deletions
diff --git a/coverage/control.py b/coverage/control.py
index a0a633f3..6f60add5 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -65,7 +65,8 @@ class coverage:
self.data = CoverageData(
basename=data_file, suffix=data_suffix,
- collector="coverage v%s" % __version__)
+ collector="coverage v%s" % __version__
+ )
# The default exclude pattern.
self.exclude('# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]')
@@ -75,6 +76,9 @@ class coverage:
os_file = self.file_locator.canonical_filename(os.__file__)
self.pylib_prefix = os.path.split(os_file)[0]
+ here = self.file_locator.canonical_filename(__file__)
+ self.cover_prefix = os.path.split(here)[0]
+
def _should_trace(self, filename, frame):
"""Decide whether to trace execution in `filename`
@@ -107,7 +111,12 @@ class coverage:
if not self.cover_pylib:
if canonical.startswith(self.pylib_prefix):
return False
-
+
+ # We exclude the coverage code itself, since a little of it will be
+ # measured otherwise.
+ if canonical.startswith(self.cover_prefix):
+ return False
+
return canonical
def use_cache(self, usecache):
diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py
index ca10edc3..b8c2a515 100644
--- a/test/coverage_coverage.py
+++ b/test/coverage_coverage.py
@@ -9,6 +9,10 @@ if os.path.exists(HTML_DIR):
shutil.rmtree(HTML_DIR)
cov = coverage.coverage()
+# Cheap trick: the coverage code itself is excluded from measurement, but if
+# we clobber the cover_prefix in the coverage object, we can defeat the
+# self-detection.
+cov.cover_prefix = "Please measure coverage.py!"
cov.erase()
cov.start()
diff --git a/test/test_coverage.py b/test/test_coverage.py
index a3886d2c..30ac4b8c 100644
--- a/test/test_coverage.py
+++ b/test/test_coverage.py
@@ -1599,17 +1599,13 @@ class ProcessTest(CoverageTest):
# Name Stmts Exec Cover
# -----------------------------------------------------------------------
- # c:/ned/coverage/trunk/coverage/__init__ 616 3 0%
# c:/ned/coverage/trunk/test/modules/covmod1 2 2 100%
# c:/ned/coverage/trunk/test/zipmods.zip/covmodzip1 2 2 100%
- # c:/python25/lib/atexit 33 5 15%
- # c:/python25/lib/ntpath 250 12 4%
- # c:/python25/lib/threading 562 1 0%
# mycode 4 4 100%
# -----------------------------------------------------------------------
- # TOTAL 1467 27 1%
+ # TOTAL 8 8 100%
- self.assert_("/coverage/" in report1)
+ self.assert_("/coverage/__init__/" not in report1)
self.assert_("/test/modules/covmod1 " in report1)
self.assert_("/test/zipmods.zip/covmodzip1 " in report1)
self.assert_("mycode " in report1)
@@ -1622,6 +1618,11 @@ class ProcessTest(CoverageTest):
# Try reporting just one module
report2 = self.run_command("coverage -r mycode.py").replace('\\', '/')
+
+ # Name Stmts Exec Cover
+ # ----------------------------
+ # mycode 4 4 100%
+
self.assert_("/coverage/" not in report2)
self.assert_("/test/modules/covmod1 " not in report2)
self.assert_("/test/zipmods.zip/covmodzip1 " not in report2)
@@ -1629,7 +1630,12 @@ class ProcessTest(CoverageTest):
# Try reporting while omitting some modules
report3 = self.run_command("coverage -r -o %s" % prefix).replace('\\', '/')
- self.assert_("/coverage/" in report3)
+
+ # Name Stmts Exec Cover
+ # ----------------------------
+ # mycode 4 4 100%
+
+ self.assert_("/coverage/" not in report3)
self.assert_("/test/modules/covmod1 " not in report3)
self.assert_("/test/zipmods.zip/covmodzip1 " not in report3)
self.assert_("mycode " in report3)