bpo-42474: test TracebackException comparison to non-equal instances (GH-23522)

Closes bpo-42474
This commit is contained in:
Irit Katriel 2020-11-27 16:38:54 +00:00 committed by GitHub
parent f5a19ead4b
commit 44ca05afc8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 39 additions and 2 deletions

View File

@ -1123,7 +1123,7 @@ class TestTracebackException(unittest.TestCase):
self.assertEqual(exc_info[0], exc.exc_type) self.assertEqual(exc_info[0], exc.exc_type)
self.assertEqual(str(exc_info[1]), str(exc)) self.assertEqual(str(exc_info[1]), str(exc))
def test_comparison(self): def test_comparison_basic(self):
try: try:
1/0 1/0
except Exception: except Exception:
@ -1135,6 +1135,43 @@ class TestTracebackException(unittest.TestCase):
self.assertNotEqual(exc, object()) self.assertNotEqual(exc, object())
self.assertEqual(exc, ALWAYS_EQ) self.assertEqual(exc, ALWAYS_EQ)
def test_comparison_params_variations(self):
def raise_exc():
try:
raise ValueError('bad value')
except:
raise
def raise_with_locals():
x, y = 1, 2
raise_exc()
try:
raise_with_locals()
except Exception:
exc_info = sys.exc_info()
exc = traceback.TracebackException(*exc_info)
exc1 = traceback.TracebackException(*exc_info, limit=10)
exc2 = traceback.TracebackException(*exc_info, limit=2)
self.assertEqual(exc, exc1) # limit=10 gets all frames
self.assertNotEqual(exc, exc2) # limit=2 truncates the output
# locals change the output
exc3 = traceback.TracebackException(*exc_info, capture_locals=True)
self.assertNotEqual(exc, exc3)
# there are no locals in the innermost frame
exc4 = traceback.TracebackException(*exc_info, limit=-1)
exc5 = traceback.TracebackException(*exc_info, limit=-1, capture_locals=True)
self.assertEqual(exc4, exc5)
# there are locals in the next-to-innermost frame
exc6 = traceback.TracebackException(*exc_info, limit=-2)
exc7 = traceback.TracebackException(*exc_info, limit=-2, capture_locals=True)
self.assertNotEqual(exc6, exc7)
def test_unhashable(self): def test_unhashable(self):
class UnhashableException(Exception): class UnhashableException(Exception):
def __eq__(self, other): def __eq__(self, other):
@ -1176,7 +1213,7 @@ class TestTracebackException(unittest.TestCase):
f = test_frame(c, None, None) f = test_frame(c, None, None)
tb = test_tb(f, 6, None) tb = test_tb(f, 6, None)
exc = traceback.TracebackException(Exception, e, tb, lookup_lines=False) exc = traceback.TracebackException(Exception, e, tb, lookup_lines=False)
self.assertEqual({}, linecache.cache) self.assertEqual(linecache.cache, {})
linecache.updatecache('/foo.py', globals()) linecache.updatecache('/foo.py', globals())
self.assertEqual(exc.stack[0].line, "import sys") self.assertEqual(exc.stack[0].line, "import sys")