Add workaround for test_raises_cyclic_reference in Python 3.5.{0,1}
This commit is contained in:
parent
a7ede64f42
commit
cec2183aeb
|
@ -159,13 +159,19 @@ class TestRaises:
|
||||||
"""
|
"""
|
||||||
Ensure pytest.raises does not leave a reference cycle (#1965).
|
Ensure pytest.raises does not leave a reference cycle (#1965).
|
||||||
"""
|
"""
|
||||||
import gc
|
|
||||||
|
|
||||||
class T:
|
class T:
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
|
# Early versions of Python 3.5 have some bug causing the
|
||||||
|
# __call__ frame to still refer to t even after everything
|
||||||
|
# is done. This makes the test pass for them.
|
||||||
|
if sys.version_info < (3, 5, 2):
|
||||||
|
del self
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
t = T()
|
t = T()
|
||||||
|
refcount = sys.getrefcount(t)
|
||||||
|
|
||||||
if method == "function":
|
if method == "function":
|
||||||
pytest.raises(ValueError, t)
|
pytest.raises(ValueError, t)
|
||||||
else:
|
else:
|
||||||
|
@ -175,14 +181,7 @@ class TestRaises:
|
||||||
# ensure both forms of pytest.raises don't leave exceptions in sys.exc_info()
|
# ensure both forms of pytest.raises don't leave exceptions in sys.exc_info()
|
||||||
assert sys.exc_info() == (None, None, None)
|
assert sys.exc_info() == (None, None, None)
|
||||||
|
|
||||||
del t
|
assert sys.getrefcount(t) == refcount
|
||||||
# Make sure this does get updated in locals dict
|
|
||||||
# otherwise it could keep a reference
|
|
||||||
locals()
|
|
||||||
|
|
||||||
# ensure the t instance is not stuck in a cyclic reference
|
|
||||||
for o in gc.get_objects():
|
|
||||||
assert type(o) is not T
|
|
||||||
|
|
||||||
def test_raises_match(self):
|
def test_raises_match(self):
|
||||||
msg = r"with base \d+"
|
msg = r"with base \d+"
|
||||||
|
|
Loading…
Reference in New Issue