Only try to remove hook from sys.meta_path if it's present
Prevent error on exit if some code messes with sys.meta_path and removes the assertionrewrite hook (CaptureMock seems to do this): File "/Users/marca/dev/hg-repos/pytest/_pytest/assertion/__init__.py", line 64, in pytest_unconfigure sys.meta_path.remove(hook) ValueError: list.remove(x): x not in list --HG-- branch : sys_meta_path_remove_hook_only_if_present
This commit is contained in:
parent
2b2c1e5b7b
commit
81f822d528
|
@ -60,7 +60,7 @@ def pytest_configure(config):
|
|||
|
||||
def pytest_unconfigure(config):
|
||||
hook = config._assertstate.hook
|
||||
if hook is not None:
|
||||
if hook is not None and hook in sys.meta_path:
|
||||
sys.meta_path.remove(hook)
|
||||
|
||||
def pytest_collection(session):
|
||||
|
|
|
@ -482,6 +482,22 @@ def test_rewritten():
|
|||
assert "@py_builtins" in globals()""".replace("\n", "\r\n"), "wb")
|
||||
assert testdir.runpytest().ret == 0
|
||||
|
||||
def test_sys_meta_path_munged(self, testdir):
|
||||
# In some versions, if any code messed with sys.meta_path and removed
|
||||
# the assertionrewrite import hook (one example is CaptureMock), it
|
||||
# would cause an error on py.test exit:
|
||||
#
|
||||
# File "/Users/marca/dev/hg-repos/pytest/_pytest/assertion/__init__.py", line 64, in pytest_unconfigure
|
||||
# sys.meta_path.remove(hook)
|
||||
# ValueError: list.remove(x): x not in list
|
||||
#
|
||||
testdir.tmpdir.join("test_meta_path.py").write("""#!/usr/bin/env python
|
||||
def test_meta_path():
|
||||
import sys
|
||||
sys.meta_path = []
|
||||
assert True""".replace("\n", "\r\n"), "wb")
|
||||
assert testdir.runpytest().ret == 0
|
||||
|
||||
def test_write_pyc(self, testdir, tmpdir, monkeypatch):
|
||||
from _pytest.assertion.rewrite import _write_pyc
|
||||
from _pytest.assertion import AssertionState
|
||||
|
|
Loading…
Reference in New Issue