diff options
-rw-r--r-- | coverage/control.py | 13 | ||||
-rw-r--r-- | test/coverage_coverage.py | 4 | ||||
-rw-r--r-- | test/test_coverage.py | 20 |
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) |