import unittest from unittest import mock from test.support import captured_stderr import idlelib.run as idlerun class RunTest(unittest.TestCase): def test_print_exception_unhashable(self): class UnhashableException(Exception): def __eq__(self, other): return True ex1 = UnhashableException('ex1') ex2 = UnhashableException('ex2') try: raise ex2 from ex1 except UnhashableException: try: raise ex1 except UnhashableException: with captured_stderr() as output: with mock.patch.object(idlerun, 'cleanup_traceback') as ct: ct.side_effect = lambda t, e: t idlerun.print_exception() tb = output.getvalue().strip().splitlines() self.assertEqual(11, len(tb)) self.assertIn('UnhashableException: ex2', tb[3]) self.assertIn('UnhashableException: ex1', tb[10]) if __name__ == '__main__': unittest.main(verbosity=2)