stream=io.StringIO())
+class CustomError(Exception):
+ pass
+
+# For test output compat:
+CustomErrorRepr = f"{__name__ + '.' if __name__ != '__main__' else ''}CustomError"
+
+
def runTests(*cases):
suite = unittest.TestSuite()
for case in cases:
ordering.append('cleanup_good')
else:
ordering.append('cleanup_exc')
- raise Exception('CleanUpExc')
+ raise CustomError('CleanUpExc')
class TestCM:
result = unittest.TestResult()
outcome = test._outcome = _Outcome(result=result)
- CleanUpExc = Exception('foo')
- exc2 = Exception('bar')
+ CleanUpExc = CustomError('foo')
+ exc2 = CustomError('bar')
def cleanup1():
raise CleanUpExc
(_, msg2), (_, msg1) = result.errors
self.assertIn('in cleanup1', msg1)
self.assertIn('raise CleanUpExc', msg1)
- self.assertIn('Exception: foo', msg1)
+ self.assertIn(f'{CustomErrorRepr}: foo', msg1)
self.assertIn('in cleanup2', msg2)
self.assertIn('raise exc2', msg2)
- self.assertIn('Exception: bar', msg2)
+ self.assertIn(f'{CustomErrorRepr}: bar', msg2)
def testCleanupInRun(self):
blowUp = False
ordering.append('setUp')
test.addCleanup(cleanup2)
if blowUp:
- raise Exception('foo')
+ raise CustomError('foo')
def testNothing(self):
ordering.append('test')
ordering.append('setUpClass')
cls.addClassCleanup(cleanup, ordering)
if blowUp:
- raise Exception()
+ raise CustomError()
def testNothing(self):
ordering.append('test')
@classmethod
ordering.append('setUpClass')
cls.addClassCleanup(cleanup, ordering)
if blowUp:
- raise Exception()
+ raise CustomError()
def testNothing(self):
ordering.append('test')
@classmethod
ordering = []
blowUp = True
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest)
- with self.assertRaises(Exception) as cm:
+ with self.assertRaises(CustomError) as cm:
suite.debug()
self.assertEqual(str(cm.exception), 'CleanUpExc')
self.assertEqual(ordering,
@classmethod
def tearDownClass(cls):
ordering.append('tearDownClass')
- raise Exception('TearDownClassExc')
+ raise CustomError('TearDownClassExc')
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest)
- with self.assertRaises(Exception) as cm:
+ with self.assertRaises(CustomError) as cm:
suite.debug()
self.assertEqual(str(cm.exception), 'TearDownClassExc')
self.assertEqual(ordering, ['setUpClass', 'test', 'tearDownClass'])
ordering = []
blowUp = True
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest)
- with self.assertRaises(Exception) as cm:
+ with self.assertRaises(CustomError) as cm:
suite.debug()
self.assertEqual(str(cm.exception), 'TearDownClassExc')
self.assertEqual(ordering, ['setUpClass', 'test', 'tearDownClass'])
pass
def cleanup1():
- raise Exception('cleanup1')
+ raise CustomError('cleanup1')
def cleanup2():
- raise Exception('cleanup2')
+ raise CustomError('cleanup2')
TestableTest.addClassCleanup(cleanup1)
TestableTest.addClassCleanup(cleanup2)
- with self.assertRaises(Exception) as e:
- TestableTest.doClassCleanups()
- self.assertEqual(e, 'cleanup1')
+ TestableTest.doClassCleanups()
+
+ self.assertEqual(len(TestableTest.tearDown_exceptions), 2)
+
+ e1, e2 = TestableTest.tearDown_exceptions
+ self.assertIsInstance(e1[1], CustomError)
+ self.assertEqual(str(e1[1]), 'cleanup2')
+ self.assertIsInstance(e2[1], CustomError)
+ self.assertEqual(str(e2[1]), 'cleanup1')
def test_with_errors_addCleanUp(self):
ordering = []
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpClass', 'setUp', 'cleanup_exc',
'tearDownClass', 'cleanup_good'])
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpClass', 'setUp', 'test', 'cleanup_good',
'tearDownClass', 'cleanup_exc'])
ordering.append('setUpClass')
cls.addClassCleanup(cleanup, ordering, blowUp=True)
if class_blow_up:
- raise Exception('ClassExc')
+ raise CustomError('ClassExc')
def setUp(self):
ordering.append('setUp')
if method_blow_up:
- raise Exception('MethodExc')
+ raise CustomError('MethodExc')
def testNothing(self):
ordering.append('test')
@classmethod
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpClass', 'setUp', 'test',
'tearDownClass', 'cleanup_exc'])
method_blow_up = False
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: ClassExc')
+ f'{CustomErrorRepr}: ClassExc')
self.assertEqual(result.errors[1][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpClass', 'cleanup_exc'])
method_blow_up = True
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: MethodExc')
+ f'{CustomErrorRepr}: MethodExc')
self.assertEqual(result.errors[1][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpClass', 'setUp', 'tearDownClass',
'cleanup_exc'])
@classmethod
def tearDownClass(cls):
ordering.append('tearDownClass')
- raise Exception('TearDownExc')
+ raise CustomError('TearDownExc')
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: TearDownExc')
+ f'{CustomErrorRepr}: TearDownExc')
self.assertEqual(ordering,
['setUpClass', 'test', 'tearDownClass', 'cleanup_good'])
module_cleanups.append((3, args, kwargs))
def module_cleanup_bad(*args, **kwargs):
- raise Exception('CleanUpExc')
+ raise CustomError('CleanUpExc')
class Module(object):
unittest.addModuleCleanup(module_cleanup_good, 1, 2, 3,
[(module_cleanup_good, (1, 2, 3),
dict(four='hello', five='goodbye')),
(module_cleanup_bad, (), {})])
- with self.assertRaises(Exception) as e:
+ with self.assertRaises(CustomError) as e:
unittest.case.doModuleCleanups()
self.assertEqual(str(e.exception), 'CleanUpExc')
self.assertEqual(unittest.case._module_cleanups, [])
ordering.append('setUpModule')
unittest.addModuleCleanup(cleanup, ordering)
if blowUp:
- raise Exception('setUpModule Exc')
+ raise CustomError('setUpModule Exc')
@staticmethod
def tearDownModule():
ordering.append('tearDownModule')
result = runTests(TestableTest)
self.assertEqual(ordering, ['setUpModule', 'cleanup_good'])
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: setUpModule Exc')
+ f'{CustomErrorRepr}: setUpModule Exc')
ordering = []
blowUp = False
ordering.append('setUpModule')
unittest.addModuleCleanup(cleanup, ordering)
if blowUp:
- raise Exception()
+ raise CustomError()
@staticmethod
def tearDownModule():
ordering.append('tearDownModule')
ordering.append('setUpModule2')
unittest.addModuleCleanup(cleanup, ordering)
if blowUp2:
- raise Exception()
+ raise CustomError()
@staticmethod
def tearDownModule():
ordering.append('tearDownModule2')
@staticmethod
def tearDownModule():
ordering.append('tearDownModule')
- raise Exception('CleanUpExc')
+ raise CustomError('CleanUpExc')
class TestableTest(unittest.TestCase):
@classmethod
sys.modules['Module'] = Module
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test',
'tearDownClass', 'tearDownModule',
'cleanup_good'])
ordering = []
blowUp = True
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest)
- with self.assertRaises(Exception) as cm:
+ with self.assertRaises(CustomError) as cm:
suite.debug()
self.assertEqual(str(cm.exception), 'CleanUpExc')
self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test',
@staticmethod
def tearDownModule():
ordering.append('tearDownModule')
- raise Exception('TearDownModuleExc')
+ raise CustomError('TearDownModuleExc')
class TestableTest(unittest.TestCase):
@classmethod
TestableTest.__module__ = 'Module'
sys.modules['Module'] = Module
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest)
- with self.assertRaises(Exception) as cm:
+ with self.assertRaises(CustomError) as cm:
suite.debug()
self.assertEqual(str(cm.exception), 'TearDownModuleExc')
self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test',
ordering = []
blowUp = True
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest)
- with self.assertRaises(Exception) as cm:
+ with self.assertRaises(CustomError) as cm:
suite.debug()
self.assertEqual(str(cm.exception), 'TearDownModuleExc')
self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test',
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpModule', 'setUpClass', 'test', 'tearDownClass',
'cleanup_exc', 'tearDownModule', 'cleanup_good'])
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpModule', 'setUp', 'test', 'tearDown',
'cleanup_exc', 'tearDownModule', 'cleanup_good'])
ordering.append('setUpModule')
unittest.addModuleCleanup(cleanup, ordering, blowUp=True)
if module_blow_up:
- raise Exception('ModuleExc')
+ raise CustomError('ModuleExc')
@staticmethod
def tearDownModule():
ordering.append('tearDownModule')
def setUpClass(cls):
ordering.append('setUpClass')
if class_blow_up:
- raise Exception('ClassExc')
+ raise CustomError('ClassExc')
def setUp(self):
ordering.append('setUp')
if method_blow_up:
- raise Exception('MethodExc')
+ raise CustomError('MethodExc')
def testNothing(self):
ordering.append('test')
@classmethod
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering,
['setUpModule', 'setUpClass', 'setUp', 'test',
'tearDownClass', 'tearDownModule',
method_blow_up = False
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: ModuleExc')
+ f'{CustomErrorRepr}: ModuleExc')
self.assertEqual(result.errors[1][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering, ['setUpModule', 'cleanup_exc'])
ordering = []
method_blow_up = False
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: ClassExc')
+ f'{CustomErrorRepr}: ClassExc')
self.assertEqual(result.errors[1][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering, ['setUpModule', 'setUpClass',
'tearDownModule', 'cleanup_exc'])
method_blow_up = True
result = runTests(TestableTest)
self.assertEqual(result.errors[0][1].splitlines()[-1],
- 'Exception: MethodExc')
+ f'{CustomErrorRepr}: MethodExc')
self.assertEqual(result.errors[1][1].splitlines()[-1],
- 'Exception: CleanUpExc')
+ f'{CustomErrorRepr}: CleanUpExc')
self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'setUp',
'tearDownClass', 'tearDownModule',
'cleanup_exc'])