summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2011-08-08 22:24:51 -0400
committerNed Batchelder <ned@nedbatchelder.com>2011-08-08 22:24:51 -0400
commit8799da89bd2ff281e95eb341d524d42f566532eb (patch)
treed970f4666e71a326d8fe43a2188fc1315845c7b5
parent1966f545699490822117d66a86f2de91734a6ee9 (diff)
downloadpython-coveragepy-8799da89bd2ff281e95eb341d524d42f566532eb.tar.gz
Control the test better; don't use os when cleaning up the path
-rw-r--r--coverage/collector.py2
-rw-r--r--coverage/fullcoverage/encodings.py6
-rw-r--r--coverage/tracer.c4
-rw-r--r--test/coveragetest.py2
-rw-r--r--test/test_process.py45
5 files changed, 32 insertions, 27 deletions
diff --git a/coverage/collector.py b/coverage/collector.py
index 5498cc6..8b8b1ff 100644
--- a/coverage/collector.py
+++ b/coverage/collector.py
@@ -233,7 +233,7 @@ class Collector(object):
self._collectors[-1].pause()
self._collectors.append(self)
#print >>sys.stderr, "Started: %r" % self._collectors
-
+
# Check to see whether we had a fullcoverage tracer installed.
traces0 = None
if hasattr(sys, "gettrace"):
diff --git a/coverage/fullcoverage/encodings.py b/coverage/fullcoverage/encodings.py
index 4e1ab35..9409b7d 100644
--- a/coverage/fullcoverage/encodings.py
+++ b/coverage/fullcoverage/encodings.py
@@ -43,8 +43,8 @@ sys.settrace(FullCoverageTracer().fullcoverage_trace)
# happen last, since all of the symbols in this module will become None
# at that exact moment, including "sys".
-import os
-this = os.path.dirname(__file__)
-sys.path.remove(this)
+parentdirs = [ d for d in sys.path if __file__.startswith(d) ]
+parentdirs.sort(key=len)
+sys.path.remove(parentdirs[-1])
del sys.modules['encodings']
import encodings
diff --git a/coverage/tracer.c b/coverage/tracer.c
index e9fc56b..2e7c7a5 100644
--- a/coverage/tracer.c
+++ b/coverage/tracer.c
@@ -473,7 +473,7 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg_unused)
* optional keyword argument:
*
* def Tracer_call(frame, event, arg, lineno=0)
- *
+ *
* If provided, the lineno argument is used as the line number, and the
* frame's f_lineno member is ignored.
*/
@@ -500,7 +500,7 @@ Tracer_call(Tracer *self, PyObject *args, PyObject *kwds)
static char *kwlist[] = {"frame", "event", "arg", "lineno", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!O|i:Tracer_call", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!O|i:Tracer_call", kwlist,
&PyFrame_Type, &frame, &MyText_Type, &what_str, &arg, &lineno)) {
goto done;
}
diff --git a/test/coveragetest.py b/test/coveragetest.py
index 9bff27e..627635f 100644
--- a/test/coveragetest.py
+++ b/test/coveragetest.py
@@ -426,7 +426,7 @@ class CoverageTest(TestCase):
here = os.path.dirname(self.nice_file(coverage.__file__, ".."))
testmods = self.nice_file(here, 'test/modules')
zipfile = self.nice_file(here, 'test/zipmods.zip')
- pypath = os.getenv('PYTHONPATH')
+ pypath = os.getenv('PYTHONPATH', '')
if pypath:
pypath += os.pathsep
pypath += testmods + os.pathsep + zipfile
diff --git a/test/test_process.py b/test/test_process.py
index e62fce2..1bdb140 100644
--- a/test/test_process.py
+++ b/test/test_process.py
@@ -292,23 +292,28 @@ class ProcessTest(CoverageTest):
self.assertTrue("No module named no_such_module" in out)
self.assertTrue("warning" not in out)
- if sys.version_info >= (2, 7): # Need coverage runnable as a module.
- def test_fullcoverage(self):
- # fullcoverage is a trick to get stdlib modules measured from the
- # very beginning of the process. Here we import os and then check
- # how many lines are measured.
- self.make_file("getenv.py", """\
- import os
- print("FOOEY == %s" % os.getenv("FOOEY"))
- """)
-
- fullcov = os.path.join(os.path.dirname(coverage.__file__), "fullcoverage")
- self.set_environ("FOOEY", "BOO")
- self.set_environ("PYTHONPATH", fullcov)
- out = self.run_command("python -m coverage run -L getenv.py")
- self.assertEqual(out, "FOOEY == BOO\n")
- data = coverage.CoverageData()
- data.read_file(".coverage")
- # The actual number of lines in os.py executed when it is imported
- # is 120 or so. Just running os.getenv executes about 5.
- self.assertGreater(data.summary()['os.py'], 50)
+ if sys.version_info >= (3, 0): # This only works on 3.x for now.
+ # It only works with the C tracer.
+ if os.getenv('COVERAGE_TEST_TRACER', 'c') == 'c':
+ def test_fullcoverage(self):
+ # fullcoverage is a trick to get stdlib modules measured from
+ # the very beginning of the process. Here we import os and
+ # then check how many lines are measured.
+ self.make_file("getenv.py", """\
+ import os
+ print("FOOEY == %s" % os.getenv("FOOEY"))
+ """)
+
+ fullcov = os.path.join(
+ os.path.dirname(coverage.__file__), "fullcoverage"
+ )
+ self.set_environ("FOOEY", "BOO")
+ self.set_environ("PYTHONPATH", fullcov)
+ out = self.run_command("python -m coverage run -L getenv.py")
+ self.assertEqual(out, "FOOEY == BOO\n")
+ data = coverage.CoverageData()
+ data.read_file(".coverage")
+ # The actual number of executed lines in os.py when it's
+ # imported is 120 or so. Just running os.getenv executes
+ # about 5.
+ self.assertGreater(data.summary()['os.py'], 50)