diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2009-11-29 07:18:07 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2009-11-29 07:18:07 -0500 |
commit | 7fb8e7193f775775dff1b1a27c948797c6fc836d (patch) | |
tree | 59398cafeef7402fbee8b56b8aae55f99f181eb4 | |
parent | 7c40a5e2bbc216e276ce49dc0ea1ec84062bd6a7 (diff) | |
download | python-coveragepy-git-7fb8e7193f775775dff1b1a27c948797c6fc836d.tar.gz |
Fix some self-measurement problems. Now coverage_coverage.py works again (had to be sure to stop coverage if check_coverage threw an exception).
-rw-r--r-- | coverage/collector.py | 5 | ||||
-rw-r--r-- | coverage/control.py | 10 | ||||
-rw-r--r-- | test/coverage_coverage.py | 6 | ||||
-rw-r--r-- | test/coveragetest.py | 13 | ||||
-rw-r--r-- | test/test_api.py | 3 |
5 files changed, 26 insertions, 11 deletions
diff --git a/coverage/collector.py b/coverage/collector.py index 5bbd02e0..6ea419ee 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -148,6 +148,9 @@ class Collector(object): # trace function. self._trace_class = Tracer or PyTracer + def __repr__(self): + return "<Collector at 0x%x>" % id(self) + def tracer_name(self): """Return the class name of the tracer we're using.""" return self._trace_class.__name__ @@ -196,6 +199,7 @@ class Collector(object): if self._collectors: self._collectors[-1].pause() self._collectors.append(self) + #print >>sys.stderr, "Started: %r" % self._collectors # Install the tracer on this thread. self._start_tracer() # Install our installation tracer in threading, to jump start other @@ -204,6 +208,7 @@ class Collector(object): def stop(self): """Stop collecting trace information.""" + #print >>sys.stderr, "Stopping: %r" % self._collectors assert self._collectors assert self._collectors[-1] is self diff --git a/coverage/control.py b/coverage/control.py index 674bb15e..7efc3492 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -1,6 +1,6 @@ """Core control stuff for Coverage.""" -import os, socket +import atexit, os, socket from coverage.annotate import AnnotateReporter from coverage.backward import string_class # pylint: disable-msg=W0622 @@ -56,7 +56,8 @@ class coverage(object): self.cover_pylib = cover_pylib self.auto_data = auto_data - + self.atexit_registered = False + self.exclude_re = "" self.exclude_list = [] @@ -168,8 +169,9 @@ class coverage(object): if self.auto_data: self.load() # Save coverage data when Python exits. - import atexit - atexit.register(self.save) + if not self.atexit_registered: + atexit.register(self.save) + self.atexit_registered = True self.collector.start() def stop(self): diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index e1e7674f..64380ab7 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -30,12 +30,16 @@ import coverage # don't warn about re-import: pylint: disable-msg=W0404 sys.modules.update(covmods) # Run nosetests, with the arguments from our command line. +nose_args = sys.argv[1:] +print(":: Running nosetests %s" % " ".join(nose_args)) import nose -nose.run(sys.argv[1:]) +nose.run(nose_args) cov.stop() +print(":: Saving .coverage") cov.save() +print(":: Writing HTML report to %s/index.html" % HTML_DIR) cov.clear_exclude() cov.exclude("#pragma: no cover") cov.exclude("def __repr__") diff --git a/test/coveragetest.py b/test/coveragetest.py index 1fb04721..073dc39f 100644 --- a/test/coveragetest.py +++ b/test/coveragetest.py @@ -168,12 +168,13 @@ class CoverageTest(TestCase): cov.exclude(exc) cov.start() - # Import the python file, executing it. - mod = self.import_module(modname) - - # Stop Coverage. - cov.stop() - + try: + # Import the python file, executing it. + mod = self.import_module(modname) + finally: + # Stop Coverage. + cov.stop() + # Clean up our side effects del sys.modules[modname] diff --git a/test/test_api.py b/test/test_api.py index 932606fd..7308cdc6 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -8,6 +8,9 @@ from coverage.backward import StringIO sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k from coveragetest import CoverageTest +# This file uses the singleton module interface. Prevent it from writing +# .coverage files at exit. +coverage.use_cache(0) class ApiTest(CoverageTest): """Api-oriented tests for Coverage.""" |