Issue #9815: assertRaises now tries to clear references to local variables in the exception's traceback.

This commit is contained in:
Antoine Pitrou 2014-04-29 01:23:50 +02:00
parent 871dfc41d3
commit 9681022f1e
3 changed files with 37 additions and 0 deletions

View file

@ -1,5 +1,6 @@
import datetime
import warnings
import weakref
import unittest
from itertools import product
@ -97,6 +98,36 @@ class Test_Assertions(unittest.TestCase):
else:
self.fail("assertRaises() didn't let exception pass through")
def test_assertRaises_frames_survival(self):
# Issue #9815: assertRaises should avoid keeping local variables
# in a traceback alive.
class A:
pass
wr = None
class Foo(unittest.TestCase):
def foo(self):
nonlocal wr
a = A()
wr = weakref.ref(a)
try:
raise IOError
except IOError:
raise ValueError
def test_functional(self):
self.assertRaises(ValueError, self.foo)
def test_with(self):
with self.assertRaises(ValueError):
self.foo()
Foo("test_functional").run()
self.assertIsNone(wr())
Foo("test_with").run()
self.assertIsNone(wr())
def testAssertNotRegex(self):
self.assertNotRegex('Ala ma kota', r'r+')
try: