diff options
-rw-r--r-- | coverage/env.py | 2 | ||||
-rw-r--r-- | coverage/pytracer.py | 2 | ||||
-rw-r--r-- | tests/test_oddball.py | 4 |
3 files changed, 5 insertions, 3 deletions
diff --git a/coverage/env.py b/coverage/env.py index 4cd02c04..6db3b857 100644 --- a/coverage/env.py +++ b/coverage/env.py @@ -12,6 +12,8 @@ LINUX = sys.platform == "linux2" # Python implementations. PYPY = '__pypy__' in sys.builtin_module_names +if PYPY: + PYPYVERSION = sys.pypy_version_info # Python versions. PYVERSION = sys.version_info diff --git a/coverage/pytracer.py b/coverage/pytracer.py index 13a3b0c8..6cd3ea30 100644 --- a/coverage/pytracer.py +++ b/coverage/pytracer.py @@ -153,7 +153,7 @@ class PyTracer(object): # so don't warn if we are in atexit on PyPy and the trace function # has changed to None. tf = sys.gettrace() - dont_warn = (env.PYPY and self.in_atexit and tf is None) + dont_warn = (env.PYPY and env.PYPYVERSION >= (5, 4) and self.in_atexit and tf is None) if (not dont_warn) and tf != self._trace: self.warn("Trace function changed, measurement is likely wrong: %r" % (tf,)) diff --git a/tests/test_oddball.py b/tests/test_oddball.py index dce65b4e..d188aa78 100644 --- a/tests/test_oddball.py +++ b/tests/test_oddball.py @@ -515,8 +515,8 @@ class GettraceTest(CoverageTest): """) status, out = self.run_command_status("python atexit_gettrace.py") self.assertEqual(status, 0) - if env.PYPY: - # PyPy clears the trace function before atexit runs. + if env.PYPY and env.PYPYVERSION >= (5, 4): + # Newer PyPy clears the trace function before atexit runs. self.assertEqual(out, "None\n") else: # Other Pythons leave the trace function in place. |