17db96d56Sopenharmony_ciimport io 27db96d56Sopenharmony_ciimport os 37db96d56Sopenharmony_ciimport sys 47db96d56Sopenharmony_ciimport pickle 57db96d56Sopenharmony_ciimport subprocess 67db96d56Sopenharmony_cifrom test import support 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ciimport unittest 97db96d56Sopenharmony_cifrom unittest.case import _Outcome 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_cifrom unittest.test.support import (LoggingResult, 127db96d56Sopenharmony_ci ResultWithNoStartTestRunStopTestRun) 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_cidef resultFactory(*_): 167db96d56Sopenharmony_ci return unittest.TestResult() 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_cidef getRunner(): 207db96d56Sopenharmony_ci return unittest.TextTestRunner(resultclass=resultFactory, 217db96d56Sopenharmony_ci stream=io.StringIO()) 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_cidef runTests(*cases): 257db96d56Sopenharmony_ci suite = unittest.TestSuite() 267db96d56Sopenharmony_ci for case in cases: 277db96d56Sopenharmony_ci tests = unittest.defaultTestLoader.loadTestsFromTestCase(case) 287db96d56Sopenharmony_ci suite.addTests(tests) 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci runner = getRunner() 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci # creating a nested suite exposes some potential bugs 337db96d56Sopenharmony_ci realSuite = unittest.TestSuite() 347db96d56Sopenharmony_ci realSuite.addTest(suite) 357db96d56Sopenharmony_ci # adding empty suites to the end exposes potential bugs 367db96d56Sopenharmony_ci suite.addTest(unittest.TestSuite()) 377db96d56Sopenharmony_ci realSuite.addTest(unittest.TestSuite()) 387db96d56Sopenharmony_ci return runner.run(realSuite) 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_cidef cleanup(ordering, blowUp=False): 427db96d56Sopenharmony_ci if not blowUp: 437db96d56Sopenharmony_ci ordering.append('cleanup_good') 447db96d56Sopenharmony_ci else: 457db96d56Sopenharmony_ci ordering.append('cleanup_exc') 467db96d56Sopenharmony_ci raise Exception('CleanUpExc') 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ciclass TestCM: 507db96d56Sopenharmony_ci def __init__(self, ordering, enter_result=None): 517db96d56Sopenharmony_ci self.ordering = ordering 527db96d56Sopenharmony_ci self.enter_result = enter_result 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci def __enter__(self): 557db96d56Sopenharmony_ci self.ordering.append('enter') 567db96d56Sopenharmony_ci return self.enter_result 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci def __exit__(self, *exc_info): 597db96d56Sopenharmony_ci self.ordering.append('exit') 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ciclass LacksEnterAndExit: 637db96d56Sopenharmony_ci pass 647db96d56Sopenharmony_ciclass LacksEnter: 657db96d56Sopenharmony_ci def __exit__(self, *exc_info): 667db96d56Sopenharmony_ci pass 677db96d56Sopenharmony_ciclass LacksExit: 687db96d56Sopenharmony_ci def __enter__(self): 697db96d56Sopenharmony_ci pass 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ciclass TestCleanUp(unittest.TestCase): 737db96d56Sopenharmony_ci def testCleanUp(self): 747db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 757db96d56Sopenharmony_ci def testNothing(self): 767db96d56Sopenharmony_ci pass 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci test = TestableTest('testNothing') 797db96d56Sopenharmony_ci self.assertEqual(test._cleanups, []) 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci cleanups = [] 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci def cleanup1(*args, **kwargs): 847db96d56Sopenharmony_ci cleanups.append((1, args, kwargs)) 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci def cleanup2(*args, **kwargs): 877db96d56Sopenharmony_ci cleanups.append((2, args, kwargs)) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci test.addCleanup(cleanup1, 1, 2, 3, four='hello', five='goodbye') 907db96d56Sopenharmony_ci test.addCleanup(cleanup2) 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci self.assertEqual(test._cleanups, 937db96d56Sopenharmony_ci [(cleanup1, (1, 2, 3), dict(four='hello', five='goodbye')), 947db96d56Sopenharmony_ci (cleanup2, (), {})]) 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci self.assertTrue(test.doCleanups()) 977db96d56Sopenharmony_ci self.assertEqual(cleanups, [(2, (), {}), (1, (1, 2, 3), dict(four='hello', five='goodbye'))]) 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci def testCleanUpWithErrors(self): 1007db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 1017db96d56Sopenharmony_ci def testNothing(self): 1027db96d56Sopenharmony_ci pass 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci test = TestableTest('testNothing') 1057db96d56Sopenharmony_ci result = unittest.TestResult() 1067db96d56Sopenharmony_ci outcome = test._outcome = _Outcome(result=result) 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci CleanUpExc = Exception('foo') 1097db96d56Sopenharmony_ci exc2 = Exception('bar') 1107db96d56Sopenharmony_ci def cleanup1(): 1117db96d56Sopenharmony_ci raise CleanUpExc 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci def cleanup2(): 1147db96d56Sopenharmony_ci raise exc2 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci test.addCleanup(cleanup1) 1177db96d56Sopenharmony_ci test.addCleanup(cleanup2) 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci self.assertFalse(test.doCleanups()) 1207db96d56Sopenharmony_ci self.assertFalse(outcome.success) 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci (_, msg2), (_, msg1) = result.errors 1237db96d56Sopenharmony_ci self.assertIn('in cleanup1', msg1) 1247db96d56Sopenharmony_ci self.assertIn('raise CleanUpExc', msg1) 1257db96d56Sopenharmony_ci self.assertIn('Exception: foo', msg1) 1267db96d56Sopenharmony_ci self.assertIn('in cleanup2', msg2) 1277db96d56Sopenharmony_ci self.assertIn('raise exc2', msg2) 1287db96d56Sopenharmony_ci self.assertIn('Exception: bar', msg2) 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci def testCleanupInRun(self): 1317db96d56Sopenharmony_ci blowUp = False 1327db96d56Sopenharmony_ci ordering = [] 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 1357db96d56Sopenharmony_ci def setUp(self): 1367db96d56Sopenharmony_ci ordering.append('setUp') 1377db96d56Sopenharmony_ci test.addCleanup(cleanup2) 1387db96d56Sopenharmony_ci if blowUp: 1397db96d56Sopenharmony_ci raise Exception('foo') 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci def testNothing(self): 1427db96d56Sopenharmony_ci ordering.append('test') 1437db96d56Sopenharmony_ci test.addCleanup(cleanup3) 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci def tearDown(self): 1467db96d56Sopenharmony_ci ordering.append('tearDown') 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci test = TestableTest('testNothing') 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci def cleanup1(): 1517db96d56Sopenharmony_ci ordering.append('cleanup1') 1527db96d56Sopenharmony_ci def cleanup2(): 1537db96d56Sopenharmony_ci ordering.append('cleanup2') 1547db96d56Sopenharmony_ci def cleanup3(): 1557db96d56Sopenharmony_ci ordering.append('cleanup3') 1567db96d56Sopenharmony_ci test.addCleanup(cleanup1) 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci def success(some_test): 1597db96d56Sopenharmony_ci self.assertEqual(some_test, test) 1607db96d56Sopenharmony_ci ordering.append('success') 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci result = unittest.TestResult() 1637db96d56Sopenharmony_ci result.addSuccess = success 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci test.run(result) 1667db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUp', 'test', 'tearDown', 'cleanup3', 1677db96d56Sopenharmony_ci 'cleanup2', 'cleanup1', 'success']) 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci blowUp = True 1707db96d56Sopenharmony_ci ordering = [] 1717db96d56Sopenharmony_ci test = TestableTest('testNothing') 1727db96d56Sopenharmony_ci test.addCleanup(cleanup1) 1737db96d56Sopenharmony_ci test.run(result) 1747db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUp', 'cleanup2', 'cleanup1']) 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci def testTestCaseDebugExecutesCleanups(self): 1777db96d56Sopenharmony_ci ordering = [] 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 1807db96d56Sopenharmony_ci def setUp(self): 1817db96d56Sopenharmony_ci ordering.append('setUp') 1827db96d56Sopenharmony_ci self.addCleanup(cleanup1) 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci def testNothing(self): 1857db96d56Sopenharmony_ci ordering.append('test') 1867db96d56Sopenharmony_ci self.addCleanup(cleanup3) 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci def tearDown(self): 1897db96d56Sopenharmony_ci ordering.append('tearDown') 1907db96d56Sopenharmony_ci test.addCleanup(cleanup4) 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci test = TestableTest('testNothing') 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci def cleanup1(): 1957db96d56Sopenharmony_ci ordering.append('cleanup1') 1967db96d56Sopenharmony_ci test.addCleanup(cleanup2) 1977db96d56Sopenharmony_ci def cleanup2(): 1987db96d56Sopenharmony_ci ordering.append('cleanup2') 1997db96d56Sopenharmony_ci def cleanup3(): 2007db96d56Sopenharmony_ci ordering.append('cleanup3') 2017db96d56Sopenharmony_ci def cleanup4(): 2027db96d56Sopenharmony_ci ordering.append('cleanup4') 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci test.debug() 2057db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUp', 'test', 'tearDown', 'cleanup4', 2067db96d56Sopenharmony_ci 'cleanup3', 'cleanup1', 'cleanup2']) 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci def test_enterContext(self): 2107db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 2117db96d56Sopenharmony_ci def testNothing(self): 2127db96d56Sopenharmony_ci pass 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci test = TestableTest('testNothing') 2157db96d56Sopenharmony_ci cleanups = [] 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci test.addCleanup(cleanups.append, 'cleanup1') 2187db96d56Sopenharmony_ci cm = TestCM(cleanups, 42) 2197db96d56Sopenharmony_ci self.assertEqual(test.enterContext(cm), 42) 2207db96d56Sopenharmony_ci test.addCleanup(cleanups.append, 'cleanup2') 2217db96d56Sopenharmony_ci 2227db96d56Sopenharmony_ci self.assertTrue(test.doCleanups()) 2237db96d56Sopenharmony_ci self.assertEqual(cleanups, ['enter', 'cleanup2', 'exit', 'cleanup1']) 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci def test_enterContext_arg_errors(self): 2267db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 2277db96d56Sopenharmony_ci def testNothing(self): 2287db96d56Sopenharmony_ci pass 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ci test = TestableTest('testNothing') 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 2337db96d56Sopenharmony_ci test.enterContext(LacksEnterAndExit()) 2347db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 2357db96d56Sopenharmony_ci test.enterContext(LacksEnter()) 2367db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 2377db96d56Sopenharmony_ci test.enterContext(LacksExit()) 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci self.assertEqual(test._cleanups, []) 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ciclass TestClassCleanup(unittest.TestCase): 2437db96d56Sopenharmony_ci def test_addClassCleanUp(self): 2447db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 2457db96d56Sopenharmony_ci def testNothing(self): 2467db96d56Sopenharmony_ci pass 2477db96d56Sopenharmony_ci test = TestableTest('testNothing') 2487db96d56Sopenharmony_ci self.assertEqual(test._class_cleanups, []) 2497db96d56Sopenharmony_ci class_cleanups = [] 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci def class_cleanup1(*args, **kwargs): 2527db96d56Sopenharmony_ci class_cleanups.append((3, args, kwargs)) 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci def class_cleanup2(*args, **kwargs): 2557db96d56Sopenharmony_ci class_cleanups.append((4, args, kwargs)) 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci TestableTest.addClassCleanup(class_cleanup1, 1, 2, 3, 2587db96d56Sopenharmony_ci four='hello', five='goodbye') 2597db96d56Sopenharmony_ci TestableTest.addClassCleanup(class_cleanup2) 2607db96d56Sopenharmony_ci 2617db96d56Sopenharmony_ci self.assertEqual(test._class_cleanups, 2627db96d56Sopenharmony_ci [(class_cleanup1, (1, 2, 3), 2637db96d56Sopenharmony_ci dict(four='hello', five='goodbye')), 2647db96d56Sopenharmony_ci (class_cleanup2, (), {})]) 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci TestableTest.doClassCleanups() 2677db96d56Sopenharmony_ci self.assertEqual(class_cleanups, [(4, (), {}), (3, (1, 2, 3), 2687db96d56Sopenharmony_ci dict(four='hello', five='goodbye'))]) 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci def test_run_class_cleanUp(self): 2717db96d56Sopenharmony_ci ordering = [] 2727db96d56Sopenharmony_ci blowUp = True 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 2757db96d56Sopenharmony_ci @classmethod 2767db96d56Sopenharmony_ci def setUpClass(cls): 2777db96d56Sopenharmony_ci ordering.append('setUpClass') 2787db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering) 2797db96d56Sopenharmony_ci if blowUp: 2807db96d56Sopenharmony_ci raise Exception() 2817db96d56Sopenharmony_ci def testNothing(self): 2827db96d56Sopenharmony_ci ordering.append('test') 2837db96d56Sopenharmony_ci @classmethod 2847db96d56Sopenharmony_ci def tearDownClass(cls): 2857db96d56Sopenharmony_ci ordering.append('tearDownClass') 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci runTests(TestableTest) 2887db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpClass', 'cleanup_good']) 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci ordering = [] 2917db96d56Sopenharmony_ci blowUp = False 2927db96d56Sopenharmony_ci runTests(TestableTest) 2937db96d56Sopenharmony_ci self.assertEqual(ordering, 2947db96d56Sopenharmony_ci ['setUpClass', 'test', 'tearDownClass', 'cleanup_good']) 2957db96d56Sopenharmony_ci 2967db96d56Sopenharmony_ci def test_run_class_cleanUp_without_tearDownClass(self): 2977db96d56Sopenharmony_ci ordering = [] 2987db96d56Sopenharmony_ci blowUp = True 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 3017db96d56Sopenharmony_ci @classmethod 3027db96d56Sopenharmony_ci def setUpClass(cls): 3037db96d56Sopenharmony_ci ordering.append('setUpClass') 3047db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering) 3057db96d56Sopenharmony_ci if blowUp: 3067db96d56Sopenharmony_ci raise Exception() 3077db96d56Sopenharmony_ci def testNothing(self): 3087db96d56Sopenharmony_ci ordering.append('test') 3097db96d56Sopenharmony_ci @classmethod 3107db96d56Sopenharmony_ci @property 3117db96d56Sopenharmony_ci def tearDownClass(cls): 3127db96d56Sopenharmony_ci raise AttributeError 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci runTests(TestableTest) 3157db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpClass', 'cleanup_good']) 3167db96d56Sopenharmony_ci 3177db96d56Sopenharmony_ci ordering = [] 3187db96d56Sopenharmony_ci blowUp = False 3197db96d56Sopenharmony_ci runTests(TestableTest) 3207db96d56Sopenharmony_ci self.assertEqual(ordering, 3217db96d56Sopenharmony_ci ['setUpClass', 'test', 'cleanup_good']) 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci def test_debug_executes_classCleanUp(self): 3247db96d56Sopenharmony_ci ordering = [] 3257db96d56Sopenharmony_ci blowUp = False 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 3287db96d56Sopenharmony_ci @classmethod 3297db96d56Sopenharmony_ci def setUpClass(cls): 3307db96d56Sopenharmony_ci ordering.append('setUpClass') 3317db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering, blowUp=blowUp) 3327db96d56Sopenharmony_ci def testNothing(self): 3337db96d56Sopenharmony_ci ordering.append('test') 3347db96d56Sopenharmony_ci @classmethod 3357db96d56Sopenharmony_ci def tearDownClass(cls): 3367db96d56Sopenharmony_ci ordering.append('tearDownClass') 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 3397db96d56Sopenharmony_ci suite.debug() 3407db96d56Sopenharmony_ci self.assertEqual(ordering, 3417db96d56Sopenharmony_ci ['setUpClass', 'test', 'tearDownClass', 'cleanup_good']) 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci ordering = [] 3447db96d56Sopenharmony_ci blowUp = True 3457db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 3467db96d56Sopenharmony_ci with self.assertRaises(Exception) as cm: 3477db96d56Sopenharmony_ci suite.debug() 3487db96d56Sopenharmony_ci self.assertEqual(str(cm.exception), 'CleanUpExc') 3497db96d56Sopenharmony_ci self.assertEqual(ordering, 3507db96d56Sopenharmony_ci ['setUpClass', 'test', 'tearDownClass', 'cleanup_exc']) 3517db96d56Sopenharmony_ci 3527db96d56Sopenharmony_ci def test_debug_executes_classCleanUp_when_teardown_exception(self): 3537db96d56Sopenharmony_ci ordering = [] 3547db96d56Sopenharmony_ci blowUp = False 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 3577db96d56Sopenharmony_ci @classmethod 3587db96d56Sopenharmony_ci def setUpClass(cls): 3597db96d56Sopenharmony_ci ordering.append('setUpClass') 3607db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering, blowUp=blowUp) 3617db96d56Sopenharmony_ci def testNothing(self): 3627db96d56Sopenharmony_ci ordering.append('test') 3637db96d56Sopenharmony_ci @classmethod 3647db96d56Sopenharmony_ci def tearDownClass(cls): 3657db96d56Sopenharmony_ci ordering.append('tearDownClass') 3667db96d56Sopenharmony_ci raise Exception('TearDownClassExc') 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 3697db96d56Sopenharmony_ci with self.assertRaises(Exception) as cm: 3707db96d56Sopenharmony_ci suite.debug() 3717db96d56Sopenharmony_ci self.assertEqual(str(cm.exception), 'TearDownClassExc') 3727db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpClass', 'test', 'tearDownClass']) 3737db96d56Sopenharmony_ci self.assertTrue(TestableTest._class_cleanups) 3747db96d56Sopenharmony_ci TestableTest._class_cleanups.clear() 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ci ordering = [] 3777db96d56Sopenharmony_ci blowUp = True 3787db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 3797db96d56Sopenharmony_ci with self.assertRaises(Exception) as cm: 3807db96d56Sopenharmony_ci suite.debug() 3817db96d56Sopenharmony_ci self.assertEqual(str(cm.exception), 'TearDownClassExc') 3827db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpClass', 'test', 'tearDownClass']) 3837db96d56Sopenharmony_ci self.assertTrue(TestableTest._class_cleanups) 3847db96d56Sopenharmony_ci TestableTest._class_cleanups.clear() 3857db96d56Sopenharmony_ci 3867db96d56Sopenharmony_ci def test_doClassCleanups_with_errors_addClassCleanUp(self): 3877db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 3887db96d56Sopenharmony_ci def testNothing(self): 3897db96d56Sopenharmony_ci pass 3907db96d56Sopenharmony_ci 3917db96d56Sopenharmony_ci def cleanup1(): 3927db96d56Sopenharmony_ci raise Exception('cleanup1') 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci def cleanup2(): 3957db96d56Sopenharmony_ci raise Exception('cleanup2') 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ci TestableTest.addClassCleanup(cleanup1) 3987db96d56Sopenharmony_ci TestableTest.addClassCleanup(cleanup2) 3997db96d56Sopenharmony_ci with self.assertRaises(Exception) as e: 4007db96d56Sopenharmony_ci TestableTest.doClassCleanups() 4017db96d56Sopenharmony_ci self.assertEqual(e, 'cleanup1') 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci def test_with_errors_addCleanUp(self): 4047db96d56Sopenharmony_ci ordering = [] 4057db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 4067db96d56Sopenharmony_ci @classmethod 4077db96d56Sopenharmony_ci def setUpClass(cls): 4087db96d56Sopenharmony_ci ordering.append('setUpClass') 4097db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering) 4107db96d56Sopenharmony_ci def setUp(self): 4117db96d56Sopenharmony_ci ordering.append('setUp') 4127db96d56Sopenharmony_ci self.addCleanup(cleanup, ordering, blowUp=True) 4137db96d56Sopenharmony_ci def testNothing(self): 4147db96d56Sopenharmony_ci pass 4157db96d56Sopenharmony_ci @classmethod 4167db96d56Sopenharmony_ci def tearDownClass(cls): 4177db96d56Sopenharmony_ci ordering.append('tearDownClass') 4187db96d56Sopenharmony_ci 4197db96d56Sopenharmony_ci result = runTests(TestableTest) 4207db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 4217db96d56Sopenharmony_ci 'Exception: CleanUpExc') 4227db96d56Sopenharmony_ci self.assertEqual(ordering, 4237db96d56Sopenharmony_ci ['setUpClass', 'setUp', 'cleanup_exc', 4247db96d56Sopenharmony_ci 'tearDownClass', 'cleanup_good']) 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci def test_run_with_errors_addClassCleanUp(self): 4277db96d56Sopenharmony_ci ordering = [] 4287db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 4297db96d56Sopenharmony_ci @classmethod 4307db96d56Sopenharmony_ci def setUpClass(cls): 4317db96d56Sopenharmony_ci ordering.append('setUpClass') 4327db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering, blowUp=True) 4337db96d56Sopenharmony_ci def setUp(self): 4347db96d56Sopenharmony_ci ordering.append('setUp') 4357db96d56Sopenharmony_ci self.addCleanup(cleanup, ordering) 4367db96d56Sopenharmony_ci def testNothing(self): 4377db96d56Sopenharmony_ci ordering.append('test') 4387db96d56Sopenharmony_ci @classmethod 4397db96d56Sopenharmony_ci def tearDownClass(cls): 4407db96d56Sopenharmony_ci ordering.append('tearDownClass') 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci result = runTests(TestableTest) 4437db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 4447db96d56Sopenharmony_ci 'Exception: CleanUpExc') 4457db96d56Sopenharmony_ci self.assertEqual(ordering, 4467db96d56Sopenharmony_ci ['setUpClass', 'setUp', 'test', 'cleanup_good', 4477db96d56Sopenharmony_ci 'tearDownClass', 'cleanup_exc']) 4487db96d56Sopenharmony_ci 4497db96d56Sopenharmony_ci def test_with_errors_in_addClassCleanup_and_setUps(self): 4507db96d56Sopenharmony_ci ordering = [] 4517db96d56Sopenharmony_ci class_blow_up = False 4527db96d56Sopenharmony_ci method_blow_up = False 4537db96d56Sopenharmony_ci 4547db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 4557db96d56Sopenharmony_ci @classmethod 4567db96d56Sopenharmony_ci def setUpClass(cls): 4577db96d56Sopenharmony_ci ordering.append('setUpClass') 4587db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering, blowUp=True) 4597db96d56Sopenharmony_ci if class_blow_up: 4607db96d56Sopenharmony_ci raise Exception('ClassExc') 4617db96d56Sopenharmony_ci def setUp(self): 4627db96d56Sopenharmony_ci ordering.append('setUp') 4637db96d56Sopenharmony_ci if method_blow_up: 4647db96d56Sopenharmony_ci raise Exception('MethodExc') 4657db96d56Sopenharmony_ci def testNothing(self): 4667db96d56Sopenharmony_ci ordering.append('test') 4677db96d56Sopenharmony_ci @classmethod 4687db96d56Sopenharmony_ci def tearDownClass(cls): 4697db96d56Sopenharmony_ci ordering.append('tearDownClass') 4707db96d56Sopenharmony_ci 4717db96d56Sopenharmony_ci result = runTests(TestableTest) 4727db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 4737db96d56Sopenharmony_ci 'Exception: CleanUpExc') 4747db96d56Sopenharmony_ci self.assertEqual(ordering, 4757db96d56Sopenharmony_ci ['setUpClass', 'setUp', 'test', 4767db96d56Sopenharmony_ci 'tearDownClass', 'cleanup_exc']) 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci ordering = [] 4797db96d56Sopenharmony_ci class_blow_up = True 4807db96d56Sopenharmony_ci method_blow_up = False 4817db96d56Sopenharmony_ci result = runTests(TestableTest) 4827db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 4837db96d56Sopenharmony_ci 'Exception: ClassExc') 4847db96d56Sopenharmony_ci self.assertEqual(result.errors[1][1].splitlines()[-1], 4857db96d56Sopenharmony_ci 'Exception: CleanUpExc') 4867db96d56Sopenharmony_ci self.assertEqual(ordering, 4877db96d56Sopenharmony_ci ['setUpClass', 'cleanup_exc']) 4887db96d56Sopenharmony_ci 4897db96d56Sopenharmony_ci ordering = [] 4907db96d56Sopenharmony_ci class_blow_up = False 4917db96d56Sopenharmony_ci method_blow_up = True 4927db96d56Sopenharmony_ci result = runTests(TestableTest) 4937db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 4947db96d56Sopenharmony_ci 'Exception: MethodExc') 4957db96d56Sopenharmony_ci self.assertEqual(result.errors[1][1].splitlines()[-1], 4967db96d56Sopenharmony_ci 'Exception: CleanUpExc') 4977db96d56Sopenharmony_ci self.assertEqual(ordering, 4987db96d56Sopenharmony_ci ['setUpClass', 'setUp', 'tearDownClass', 4997db96d56Sopenharmony_ci 'cleanup_exc']) 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci def test_with_errors_in_tearDownClass(self): 5027db96d56Sopenharmony_ci ordering = [] 5037db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 5047db96d56Sopenharmony_ci @classmethod 5057db96d56Sopenharmony_ci def setUpClass(cls): 5067db96d56Sopenharmony_ci ordering.append('setUpClass') 5077db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering) 5087db96d56Sopenharmony_ci def testNothing(self): 5097db96d56Sopenharmony_ci ordering.append('test') 5107db96d56Sopenharmony_ci @classmethod 5117db96d56Sopenharmony_ci def tearDownClass(cls): 5127db96d56Sopenharmony_ci ordering.append('tearDownClass') 5137db96d56Sopenharmony_ci raise Exception('TearDownExc') 5147db96d56Sopenharmony_ci 5157db96d56Sopenharmony_ci result = runTests(TestableTest) 5167db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 5177db96d56Sopenharmony_ci 'Exception: TearDownExc') 5187db96d56Sopenharmony_ci self.assertEqual(ordering, 5197db96d56Sopenharmony_ci ['setUpClass', 'test', 'tearDownClass', 'cleanup_good']) 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci def test_enterClassContext(self): 5227db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 5237db96d56Sopenharmony_ci def testNothing(self): 5247db96d56Sopenharmony_ci pass 5257db96d56Sopenharmony_ci 5267db96d56Sopenharmony_ci cleanups = [] 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci TestableTest.addClassCleanup(cleanups.append, 'cleanup1') 5297db96d56Sopenharmony_ci cm = TestCM(cleanups, 42) 5307db96d56Sopenharmony_ci self.assertEqual(TestableTest.enterClassContext(cm), 42) 5317db96d56Sopenharmony_ci TestableTest.addClassCleanup(cleanups.append, 'cleanup2') 5327db96d56Sopenharmony_ci 5337db96d56Sopenharmony_ci TestableTest.doClassCleanups() 5347db96d56Sopenharmony_ci self.assertEqual(cleanups, ['enter', 'cleanup2', 'exit', 'cleanup1']) 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci def test_enterClassContext_arg_errors(self): 5377db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 5387db96d56Sopenharmony_ci def testNothing(self): 5397db96d56Sopenharmony_ci pass 5407db96d56Sopenharmony_ci 5417db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 5427db96d56Sopenharmony_ci TestableTest.enterClassContext(LacksEnterAndExit()) 5437db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 5447db96d56Sopenharmony_ci TestableTest.enterClassContext(LacksEnter()) 5457db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 5467db96d56Sopenharmony_ci TestableTest.enterClassContext(LacksExit()) 5477db96d56Sopenharmony_ci 5487db96d56Sopenharmony_ci self.assertEqual(TestableTest._class_cleanups, []) 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ci def test_run_nested_test(self): 5517db96d56Sopenharmony_ci ordering = [] 5527db96d56Sopenharmony_ci 5537db96d56Sopenharmony_ci class InnerTest(unittest.TestCase): 5547db96d56Sopenharmony_ci @classmethod 5557db96d56Sopenharmony_ci def setUpClass(cls): 5567db96d56Sopenharmony_ci ordering.append('inner setup') 5577db96d56Sopenharmony_ci cls.addClassCleanup(ordering.append, 'inner cleanup') 5587db96d56Sopenharmony_ci def test(self): 5597db96d56Sopenharmony_ci ordering.append('inner test') 5607db96d56Sopenharmony_ci 5617db96d56Sopenharmony_ci class OuterTest(unittest.TestCase): 5627db96d56Sopenharmony_ci @classmethod 5637db96d56Sopenharmony_ci def setUpClass(cls): 5647db96d56Sopenharmony_ci ordering.append('outer setup') 5657db96d56Sopenharmony_ci cls.addClassCleanup(ordering.append, 'outer cleanup') 5667db96d56Sopenharmony_ci def test(self): 5677db96d56Sopenharmony_ci ordering.append('start outer test') 5687db96d56Sopenharmony_ci runTests(InnerTest) 5697db96d56Sopenharmony_ci ordering.append('end outer test') 5707db96d56Sopenharmony_ci 5717db96d56Sopenharmony_ci runTests(OuterTest) 5727db96d56Sopenharmony_ci self.assertEqual(ordering, [ 5737db96d56Sopenharmony_ci 'outer setup', 'start outer test', 5747db96d56Sopenharmony_ci 'inner setup', 'inner test', 'inner cleanup', 5757db96d56Sopenharmony_ci 'end outer test', 'outer cleanup']) 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ci 5787db96d56Sopenharmony_ciclass TestModuleCleanUp(unittest.TestCase): 5797db96d56Sopenharmony_ci def test_add_and_do_ModuleCleanup(self): 5807db96d56Sopenharmony_ci module_cleanups = [] 5817db96d56Sopenharmony_ci 5827db96d56Sopenharmony_ci def module_cleanup1(*args, **kwargs): 5837db96d56Sopenharmony_ci module_cleanups.append((3, args, kwargs)) 5847db96d56Sopenharmony_ci 5857db96d56Sopenharmony_ci def module_cleanup2(*args, **kwargs): 5867db96d56Sopenharmony_ci module_cleanups.append((4, args, kwargs)) 5877db96d56Sopenharmony_ci 5887db96d56Sopenharmony_ci class Module(object): 5897db96d56Sopenharmony_ci unittest.addModuleCleanup(module_cleanup1, 1, 2, 3, 5907db96d56Sopenharmony_ci four='hello', five='goodbye') 5917db96d56Sopenharmony_ci unittest.addModuleCleanup(module_cleanup2) 5927db96d56Sopenharmony_ci 5937db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, 5947db96d56Sopenharmony_ci [(module_cleanup1, (1, 2, 3), 5957db96d56Sopenharmony_ci dict(four='hello', five='goodbye')), 5967db96d56Sopenharmony_ci (module_cleanup2, (), {})]) 5977db96d56Sopenharmony_ci 5987db96d56Sopenharmony_ci unittest.case.doModuleCleanups() 5997db96d56Sopenharmony_ci self.assertEqual(module_cleanups, [(4, (), {}), (3, (1, 2, 3), 6007db96d56Sopenharmony_ci dict(four='hello', five='goodbye'))]) 6017db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 6027db96d56Sopenharmony_ci 6037db96d56Sopenharmony_ci def test_doModuleCleanup_with_errors_in_addModuleCleanup(self): 6047db96d56Sopenharmony_ci module_cleanups = [] 6057db96d56Sopenharmony_ci 6067db96d56Sopenharmony_ci def module_cleanup_good(*args, **kwargs): 6077db96d56Sopenharmony_ci module_cleanups.append((3, args, kwargs)) 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci def module_cleanup_bad(*args, **kwargs): 6107db96d56Sopenharmony_ci raise Exception('CleanUpExc') 6117db96d56Sopenharmony_ci 6127db96d56Sopenharmony_ci class Module(object): 6137db96d56Sopenharmony_ci unittest.addModuleCleanup(module_cleanup_good, 1, 2, 3, 6147db96d56Sopenharmony_ci four='hello', five='goodbye') 6157db96d56Sopenharmony_ci unittest.addModuleCleanup(module_cleanup_bad) 6167db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, 6177db96d56Sopenharmony_ci [(module_cleanup_good, (1, 2, 3), 6187db96d56Sopenharmony_ci dict(four='hello', five='goodbye')), 6197db96d56Sopenharmony_ci (module_cleanup_bad, (), {})]) 6207db96d56Sopenharmony_ci with self.assertRaises(Exception) as e: 6217db96d56Sopenharmony_ci unittest.case.doModuleCleanups() 6227db96d56Sopenharmony_ci self.assertEqual(str(e.exception), 'CleanUpExc') 6237db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 6247db96d56Sopenharmony_ci 6257db96d56Sopenharmony_ci def test_addModuleCleanup_arg_errors(self): 6267db96d56Sopenharmony_ci cleanups = [] 6277db96d56Sopenharmony_ci def cleanup(*args, **kwargs): 6287db96d56Sopenharmony_ci cleanups.append((args, kwargs)) 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ci class Module(object): 6317db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, 1, 2, function='hello') 6327db96d56Sopenharmony_ci with self.assertRaises(TypeError): 6337db96d56Sopenharmony_ci unittest.addModuleCleanup(function=cleanup, arg='hello') 6347db96d56Sopenharmony_ci with self.assertRaises(TypeError): 6357db96d56Sopenharmony_ci unittest.addModuleCleanup() 6367db96d56Sopenharmony_ci unittest.case.doModuleCleanups() 6377db96d56Sopenharmony_ci self.assertEqual(cleanups, 6387db96d56Sopenharmony_ci [((1, 2), {'function': 'hello'})]) 6397db96d56Sopenharmony_ci 6407db96d56Sopenharmony_ci def test_run_module_cleanUp(self): 6417db96d56Sopenharmony_ci blowUp = True 6427db96d56Sopenharmony_ci ordering = [] 6437db96d56Sopenharmony_ci class Module(object): 6447db96d56Sopenharmony_ci @staticmethod 6457db96d56Sopenharmony_ci def setUpModule(): 6467db96d56Sopenharmony_ci ordering.append('setUpModule') 6477db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 6487db96d56Sopenharmony_ci if blowUp: 6497db96d56Sopenharmony_ci raise Exception('setUpModule Exc') 6507db96d56Sopenharmony_ci @staticmethod 6517db96d56Sopenharmony_ci def tearDownModule(): 6527db96d56Sopenharmony_ci ordering.append('tearDownModule') 6537db96d56Sopenharmony_ci 6547db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 6557db96d56Sopenharmony_ci @classmethod 6567db96d56Sopenharmony_ci def setUpClass(cls): 6577db96d56Sopenharmony_ci ordering.append('setUpClass') 6587db96d56Sopenharmony_ci def testNothing(self): 6597db96d56Sopenharmony_ci ordering.append('test') 6607db96d56Sopenharmony_ci @classmethod 6617db96d56Sopenharmony_ci def tearDownClass(cls): 6627db96d56Sopenharmony_ci ordering.append('tearDownClass') 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 6657db96d56Sopenharmony_ci sys.modules['Module'] = Module 6667db96d56Sopenharmony_ci result = runTests(TestableTest) 6677db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'cleanup_good']) 6687db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 6697db96d56Sopenharmony_ci 'Exception: setUpModule Exc') 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ci ordering = [] 6727db96d56Sopenharmony_ci blowUp = False 6737db96d56Sopenharmony_ci runTests(TestableTest) 6747db96d56Sopenharmony_ci self.assertEqual(ordering, 6757db96d56Sopenharmony_ci ['setUpModule', 'setUpClass', 'test', 'tearDownClass', 6767db96d56Sopenharmony_ci 'tearDownModule', 'cleanup_good']) 6777db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 6787db96d56Sopenharmony_ci 6797db96d56Sopenharmony_ci def test_run_multiple_module_cleanUp(self): 6807db96d56Sopenharmony_ci blowUp = True 6817db96d56Sopenharmony_ci blowUp2 = False 6827db96d56Sopenharmony_ci ordering = [] 6837db96d56Sopenharmony_ci class Module1(object): 6847db96d56Sopenharmony_ci @staticmethod 6857db96d56Sopenharmony_ci def setUpModule(): 6867db96d56Sopenharmony_ci ordering.append('setUpModule') 6877db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 6887db96d56Sopenharmony_ci if blowUp: 6897db96d56Sopenharmony_ci raise Exception() 6907db96d56Sopenharmony_ci @staticmethod 6917db96d56Sopenharmony_ci def tearDownModule(): 6927db96d56Sopenharmony_ci ordering.append('tearDownModule') 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ci class Module2(object): 6957db96d56Sopenharmony_ci @staticmethod 6967db96d56Sopenharmony_ci def setUpModule(): 6977db96d56Sopenharmony_ci ordering.append('setUpModule2') 6987db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 6997db96d56Sopenharmony_ci if blowUp2: 7007db96d56Sopenharmony_ci raise Exception() 7017db96d56Sopenharmony_ci @staticmethod 7027db96d56Sopenharmony_ci def tearDownModule(): 7037db96d56Sopenharmony_ci ordering.append('tearDownModule2') 7047db96d56Sopenharmony_ci 7057db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 7067db96d56Sopenharmony_ci @classmethod 7077db96d56Sopenharmony_ci def setUpClass(cls): 7087db96d56Sopenharmony_ci ordering.append('setUpClass') 7097db96d56Sopenharmony_ci def testNothing(self): 7107db96d56Sopenharmony_ci ordering.append('test') 7117db96d56Sopenharmony_ci @classmethod 7127db96d56Sopenharmony_ci def tearDownClass(cls): 7137db96d56Sopenharmony_ci ordering.append('tearDownClass') 7147db96d56Sopenharmony_ci 7157db96d56Sopenharmony_ci class TestableTest2(unittest.TestCase): 7167db96d56Sopenharmony_ci @classmethod 7177db96d56Sopenharmony_ci def setUpClass(cls): 7187db96d56Sopenharmony_ci ordering.append('setUpClass2') 7197db96d56Sopenharmony_ci def testNothing(self): 7207db96d56Sopenharmony_ci ordering.append('test2') 7217db96d56Sopenharmony_ci @classmethod 7227db96d56Sopenharmony_ci def tearDownClass(cls): 7237db96d56Sopenharmony_ci ordering.append('tearDownClass2') 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci TestableTest.__module__ = 'Module1' 7267db96d56Sopenharmony_ci sys.modules['Module1'] = Module1 7277db96d56Sopenharmony_ci TestableTest2.__module__ = 'Module2' 7287db96d56Sopenharmony_ci sys.modules['Module2'] = Module2 7297db96d56Sopenharmony_ci runTests(TestableTest, TestableTest2) 7307db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'cleanup_good', 7317db96d56Sopenharmony_ci 'setUpModule2', 'setUpClass2', 'test2', 7327db96d56Sopenharmony_ci 'tearDownClass2', 'tearDownModule2', 7337db96d56Sopenharmony_ci 'cleanup_good']) 7347db96d56Sopenharmony_ci ordering = [] 7357db96d56Sopenharmony_ci blowUp = False 7367db96d56Sopenharmony_ci blowUp2 = True 7377db96d56Sopenharmony_ci runTests(TestableTest, TestableTest2) 7387db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test', 7397db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule', 7407db96d56Sopenharmony_ci 'cleanup_good', 'setUpModule2', 7417db96d56Sopenharmony_ci 'cleanup_good']) 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ci ordering = [] 7447db96d56Sopenharmony_ci blowUp = False 7457db96d56Sopenharmony_ci blowUp2 = False 7467db96d56Sopenharmony_ci runTests(TestableTest, TestableTest2) 7477db96d56Sopenharmony_ci self.assertEqual(ordering, 7487db96d56Sopenharmony_ci ['setUpModule', 'setUpClass', 'test', 'tearDownClass', 7497db96d56Sopenharmony_ci 'tearDownModule', 'cleanup_good', 'setUpModule2', 7507db96d56Sopenharmony_ci 'setUpClass2', 'test2', 'tearDownClass2', 7517db96d56Sopenharmony_ci 'tearDownModule2', 'cleanup_good']) 7527db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 7537db96d56Sopenharmony_ci 7547db96d56Sopenharmony_ci def test_run_module_cleanUp_without_teardown(self): 7557db96d56Sopenharmony_ci ordering = [] 7567db96d56Sopenharmony_ci class Module(object): 7577db96d56Sopenharmony_ci @staticmethod 7587db96d56Sopenharmony_ci def setUpModule(): 7597db96d56Sopenharmony_ci ordering.append('setUpModule') 7607db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 7617db96d56Sopenharmony_ci 7627db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 7637db96d56Sopenharmony_ci @classmethod 7647db96d56Sopenharmony_ci def setUpClass(cls): 7657db96d56Sopenharmony_ci ordering.append('setUpClass') 7667db96d56Sopenharmony_ci def testNothing(self): 7677db96d56Sopenharmony_ci ordering.append('test') 7687db96d56Sopenharmony_ci @classmethod 7697db96d56Sopenharmony_ci def tearDownClass(cls): 7707db96d56Sopenharmony_ci ordering.append('tearDownClass') 7717db96d56Sopenharmony_ci 7727db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 7737db96d56Sopenharmony_ci sys.modules['Module'] = Module 7747db96d56Sopenharmony_ci runTests(TestableTest) 7757db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test', 7767db96d56Sopenharmony_ci 'tearDownClass', 'cleanup_good']) 7777db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 7787db96d56Sopenharmony_ci 7797db96d56Sopenharmony_ci def test_run_module_cleanUp_when_teardown_exception(self): 7807db96d56Sopenharmony_ci ordering = [] 7817db96d56Sopenharmony_ci class Module(object): 7827db96d56Sopenharmony_ci @staticmethod 7837db96d56Sopenharmony_ci def setUpModule(): 7847db96d56Sopenharmony_ci ordering.append('setUpModule') 7857db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 7867db96d56Sopenharmony_ci @staticmethod 7877db96d56Sopenharmony_ci def tearDownModule(): 7887db96d56Sopenharmony_ci ordering.append('tearDownModule') 7897db96d56Sopenharmony_ci raise Exception('CleanUpExc') 7907db96d56Sopenharmony_ci 7917db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 7927db96d56Sopenharmony_ci @classmethod 7937db96d56Sopenharmony_ci def setUpClass(cls): 7947db96d56Sopenharmony_ci ordering.append('setUpClass') 7957db96d56Sopenharmony_ci def testNothing(self): 7967db96d56Sopenharmony_ci ordering.append('test') 7977db96d56Sopenharmony_ci @classmethod 7987db96d56Sopenharmony_ci def tearDownClass(cls): 7997db96d56Sopenharmony_ci ordering.append('tearDownClass') 8007db96d56Sopenharmony_ci 8017db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 8027db96d56Sopenharmony_ci sys.modules['Module'] = Module 8037db96d56Sopenharmony_ci result = runTests(TestableTest) 8047db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 8057db96d56Sopenharmony_ci 'Exception: CleanUpExc') 8067db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test', 8077db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule', 8087db96d56Sopenharmony_ci 'cleanup_good']) 8097db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 8107db96d56Sopenharmony_ci 8117db96d56Sopenharmony_ci def test_debug_module_executes_cleanUp(self): 8127db96d56Sopenharmony_ci ordering = [] 8137db96d56Sopenharmony_ci blowUp = False 8147db96d56Sopenharmony_ci class Module(object): 8157db96d56Sopenharmony_ci @staticmethod 8167db96d56Sopenharmony_ci def setUpModule(): 8177db96d56Sopenharmony_ci ordering.append('setUpModule') 8187db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering, blowUp=blowUp) 8197db96d56Sopenharmony_ci @staticmethod 8207db96d56Sopenharmony_ci def tearDownModule(): 8217db96d56Sopenharmony_ci ordering.append('tearDownModule') 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 8247db96d56Sopenharmony_ci @classmethod 8257db96d56Sopenharmony_ci def setUpClass(cls): 8267db96d56Sopenharmony_ci ordering.append('setUpClass') 8277db96d56Sopenharmony_ci def testNothing(self): 8287db96d56Sopenharmony_ci ordering.append('test') 8297db96d56Sopenharmony_ci @classmethod 8307db96d56Sopenharmony_ci def tearDownClass(cls): 8317db96d56Sopenharmony_ci ordering.append('tearDownClass') 8327db96d56Sopenharmony_ci 8337db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 8347db96d56Sopenharmony_ci sys.modules['Module'] = Module 8357db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 8367db96d56Sopenharmony_ci suite.debug() 8377db96d56Sopenharmony_ci self.assertEqual(ordering, 8387db96d56Sopenharmony_ci ['setUpModule', 'setUpClass', 'test', 'tearDownClass', 8397db96d56Sopenharmony_ci 'tearDownModule', 'cleanup_good']) 8407db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 8417db96d56Sopenharmony_ci 8427db96d56Sopenharmony_ci ordering = [] 8437db96d56Sopenharmony_ci blowUp = True 8447db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 8457db96d56Sopenharmony_ci with self.assertRaises(Exception) as cm: 8467db96d56Sopenharmony_ci suite.debug() 8477db96d56Sopenharmony_ci self.assertEqual(str(cm.exception), 'CleanUpExc') 8487db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test', 8497db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule', 'cleanup_exc']) 8507db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 8517db96d56Sopenharmony_ci 8527db96d56Sopenharmony_ci def test_debug_module_cleanUp_when_teardown_exception(self): 8537db96d56Sopenharmony_ci ordering = [] 8547db96d56Sopenharmony_ci blowUp = False 8557db96d56Sopenharmony_ci class Module(object): 8567db96d56Sopenharmony_ci @staticmethod 8577db96d56Sopenharmony_ci def setUpModule(): 8587db96d56Sopenharmony_ci ordering.append('setUpModule') 8597db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering, blowUp=blowUp) 8607db96d56Sopenharmony_ci @staticmethod 8617db96d56Sopenharmony_ci def tearDownModule(): 8627db96d56Sopenharmony_ci ordering.append('tearDownModule') 8637db96d56Sopenharmony_ci raise Exception('TearDownModuleExc') 8647db96d56Sopenharmony_ci 8657db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 8667db96d56Sopenharmony_ci @classmethod 8677db96d56Sopenharmony_ci def setUpClass(cls): 8687db96d56Sopenharmony_ci ordering.append('setUpClass') 8697db96d56Sopenharmony_ci def testNothing(self): 8707db96d56Sopenharmony_ci ordering.append('test') 8717db96d56Sopenharmony_ci @classmethod 8727db96d56Sopenharmony_ci def tearDownClass(cls): 8737db96d56Sopenharmony_ci ordering.append('tearDownClass') 8747db96d56Sopenharmony_ci 8757db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 8767db96d56Sopenharmony_ci sys.modules['Module'] = Module 8777db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 8787db96d56Sopenharmony_ci with self.assertRaises(Exception) as cm: 8797db96d56Sopenharmony_ci suite.debug() 8807db96d56Sopenharmony_ci self.assertEqual(str(cm.exception), 'TearDownModuleExc') 8817db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test', 8827db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule']) 8837db96d56Sopenharmony_ci self.assertTrue(unittest.case._module_cleanups) 8847db96d56Sopenharmony_ci unittest.case._module_cleanups.clear() 8857db96d56Sopenharmony_ci 8867db96d56Sopenharmony_ci ordering = [] 8877db96d56Sopenharmony_ci blowUp = True 8887db96d56Sopenharmony_ci suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestableTest) 8897db96d56Sopenharmony_ci with self.assertRaises(Exception) as cm: 8907db96d56Sopenharmony_ci suite.debug() 8917db96d56Sopenharmony_ci self.assertEqual(str(cm.exception), 'TearDownModuleExc') 8927db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'test', 8937db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule']) 8947db96d56Sopenharmony_ci self.assertTrue(unittest.case._module_cleanups) 8957db96d56Sopenharmony_ci unittest.case._module_cleanups.clear() 8967db96d56Sopenharmony_ci 8977db96d56Sopenharmony_ci def test_addClassCleanup_arg_errors(self): 8987db96d56Sopenharmony_ci cleanups = [] 8997db96d56Sopenharmony_ci def cleanup(*args, **kwargs): 9007db96d56Sopenharmony_ci cleanups.append((args, kwargs)) 9017db96d56Sopenharmony_ci 9027db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 9037db96d56Sopenharmony_ci @classmethod 9047db96d56Sopenharmony_ci def setUpClass(cls): 9057db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, 1, 2, function=3, cls=4) 9067db96d56Sopenharmony_ci with self.assertRaises(TypeError): 9077db96d56Sopenharmony_ci cls.addClassCleanup(function=cleanup, arg='hello') 9087db96d56Sopenharmony_ci def testNothing(self): 9097db96d56Sopenharmony_ci pass 9107db96d56Sopenharmony_ci 9117db96d56Sopenharmony_ci with self.assertRaises(TypeError): 9127db96d56Sopenharmony_ci TestableTest.addClassCleanup() 9137db96d56Sopenharmony_ci with self.assertRaises(TypeError): 9147db96d56Sopenharmony_ci unittest.TestCase.addCleanup(cls=TestableTest(), function=cleanup) 9157db96d56Sopenharmony_ci runTests(TestableTest) 9167db96d56Sopenharmony_ci self.assertEqual(cleanups, 9177db96d56Sopenharmony_ci [((1, 2), {'function': 3, 'cls': 4})]) 9187db96d56Sopenharmony_ci 9197db96d56Sopenharmony_ci def test_addCleanup_arg_errors(self): 9207db96d56Sopenharmony_ci cleanups = [] 9217db96d56Sopenharmony_ci def cleanup(*args, **kwargs): 9227db96d56Sopenharmony_ci cleanups.append((args, kwargs)) 9237db96d56Sopenharmony_ci 9247db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 9257db96d56Sopenharmony_ci def setUp(self2): 9267db96d56Sopenharmony_ci self2.addCleanup(cleanup, 1, 2, function=3, self=4) 9277db96d56Sopenharmony_ci with self.assertRaises(TypeError): 9287db96d56Sopenharmony_ci self2.addCleanup(function=cleanup, arg='hello') 9297db96d56Sopenharmony_ci def testNothing(self): 9307db96d56Sopenharmony_ci pass 9317db96d56Sopenharmony_ci 9327db96d56Sopenharmony_ci with self.assertRaises(TypeError): 9337db96d56Sopenharmony_ci TestableTest().addCleanup() 9347db96d56Sopenharmony_ci with self.assertRaises(TypeError): 9357db96d56Sopenharmony_ci unittest.TestCase.addCleanup(self=TestableTest(), function=cleanup) 9367db96d56Sopenharmony_ci runTests(TestableTest) 9377db96d56Sopenharmony_ci self.assertEqual(cleanups, 9387db96d56Sopenharmony_ci [((1, 2), {'function': 3, 'self': 4})]) 9397db96d56Sopenharmony_ci 9407db96d56Sopenharmony_ci def test_with_errors_in_addClassCleanup(self): 9417db96d56Sopenharmony_ci ordering = [] 9427db96d56Sopenharmony_ci 9437db96d56Sopenharmony_ci class Module(object): 9447db96d56Sopenharmony_ci @staticmethod 9457db96d56Sopenharmony_ci def setUpModule(): 9467db96d56Sopenharmony_ci ordering.append('setUpModule') 9477db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 9487db96d56Sopenharmony_ci @staticmethod 9497db96d56Sopenharmony_ci def tearDownModule(): 9507db96d56Sopenharmony_ci ordering.append('tearDownModule') 9517db96d56Sopenharmony_ci 9527db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 9537db96d56Sopenharmony_ci @classmethod 9547db96d56Sopenharmony_ci def setUpClass(cls): 9557db96d56Sopenharmony_ci ordering.append('setUpClass') 9567db96d56Sopenharmony_ci cls.addClassCleanup(cleanup, ordering, blowUp=True) 9577db96d56Sopenharmony_ci def testNothing(self): 9587db96d56Sopenharmony_ci ordering.append('test') 9597db96d56Sopenharmony_ci @classmethod 9607db96d56Sopenharmony_ci def tearDownClass(cls): 9617db96d56Sopenharmony_ci ordering.append('tearDownClass') 9627db96d56Sopenharmony_ci 9637db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 9647db96d56Sopenharmony_ci sys.modules['Module'] = Module 9657db96d56Sopenharmony_ci 9667db96d56Sopenharmony_ci result = runTests(TestableTest) 9677db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 9687db96d56Sopenharmony_ci 'Exception: CleanUpExc') 9697db96d56Sopenharmony_ci self.assertEqual(ordering, 9707db96d56Sopenharmony_ci ['setUpModule', 'setUpClass', 'test', 'tearDownClass', 9717db96d56Sopenharmony_ci 'cleanup_exc', 'tearDownModule', 'cleanup_good']) 9727db96d56Sopenharmony_ci 9737db96d56Sopenharmony_ci def test_with_errors_in_addCleanup(self): 9747db96d56Sopenharmony_ci ordering = [] 9757db96d56Sopenharmony_ci class Module(object): 9767db96d56Sopenharmony_ci @staticmethod 9777db96d56Sopenharmony_ci def setUpModule(): 9787db96d56Sopenharmony_ci ordering.append('setUpModule') 9797db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering) 9807db96d56Sopenharmony_ci @staticmethod 9817db96d56Sopenharmony_ci def tearDownModule(): 9827db96d56Sopenharmony_ci ordering.append('tearDownModule') 9837db96d56Sopenharmony_ci 9847db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 9857db96d56Sopenharmony_ci def setUp(self): 9867db96d56Sopenharmony_ci ordering.append('setUp') 9877db96d56Sopenharmony_ci self.addCleanup(cleanup, ordering, blowUp=True) 9887db96d56Sopenharmony_ci def testNothing(self): 9897db96d56Sopenharmony_ci ordering.append('test') 9907db96d56Sopenharmony_ci def tearDown(self): 9917db96d56Sopenharmony_ci ordering.append('tearDown') 9927db96d56Sopenharmony_ci 9937db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 9947db96d56Sopenharmony_ci sys.modules['Module'] = Module 9957db96d56Sopenharmony_ci 9967db96d56Sopenharmony_ci result = runTests(TestableTest) 9977db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 9987db96d56Sopenharmony_ci 'Exception: CleanUpExc') 9997db96d56Sopenharmony_ci self.assertEqual(ordering, 10007db96d56Sopenharmony_ci ['setUpModule', 'setUp', 'test', 'tearDown', 10017db96d56Sopenharmony_ci 'cleanup_exc', 'tearDownModule', 'cleanup_good']) 10027db96d56Sopenharmony_ci 10037db96d56Sopenharmony_ci def test_with_errors_in_addModuleCleanup_and_setUps(self): 10047db96d56Sopenharmony_ci ordering = [] 10057db96d56Sopenharmony_ci module_blow_up = False 10067db96d56Sopenharmony_ci class_blow_up = False 10077db96d56Sopenharmony_ci method_blow_up = False 10087db96d56Sopenharmony_ci class Module(object): 10097db96d56Sopenharmony_ci @staticmethod 10107db96d56Sopenharmony_ci def setUpModule(): 10117db96d56Sopenharmony_ci ordering.append('setUpModule') 10127db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup, ordering, blowUp=True) 10137db96d56Sopenharmony_ci if module_blow_up: 10147db96d56Sopenharmony_ci raise Exception('ModuleExc') 10157db96d56Sopenharmony_ci @staticmethod 10167db96d56Sopenharmony_ci def tearDownModule(): 10177db96d56Sopenharmony_ci ordering.append('tearDownModule') 10187db96d56Sopenharmony_ci 10197db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 10207db96d56Sopenharmony_ci @classmethod 10217db96d56Sopenharmony_ci def setUpClass(cls): 10227db96d56Sopenharmony_ci ordering.append('setUpClass') 10237db96d56Sopenharmony_ci if class_blow_up: 10247db96d56Sopenharmony_ci raise Exception('ClassExc') 10257db96d56Sopenharmony_ci def setUp(self): 10267db96d56Sopenharmony_ci ordering.append('setUp') 10277db96d56Sopenharmony_ci if method_blow_up: 10287db96d56Sopenharmony_ci raise Exception('MethodExc') 10297db96d56Sopenharmony_ci def testNothing(self): 10307db96d56Sopenharmony_ci ordering.append('test') 10317db96d56Sopenharmony_ci @classmethod 10327db96d56Sopenharmony_ci def tearDownClass(cls): 10337db96d56Sopenharmony_ci ordering.append('tearDownClass') 10347db96d56Sopenharmony_ci 10357db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 10367db96d56Sopenharmony_ci sys.modules['Module'] = Module 10377db96d56Sopenharmony_ci 10387db96d56Sopenharmony_ci result = runTests(TestableTest) 10397db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 10407db96d56Sopenharmony_ci 'Exception: CleanUpExc') 10417db96d56Sopenharmony_ci self.assertEqual(ordering, 10427db96d56Sopenharmony_ci ['setUpModule', 'setUpClass', 'setUp', 'test', 10437db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule', 10447db96d56Sopenharmony_ci 'cleanup_exc']) 10457db96d56Sopenharmony_ci 10467db96d56Sopenharmony_ci ordering = [] 10477db96d56Sopenharmony_ci module_blow_up = True 10487db96d56Sopenharmony_ci class_blow_up = False 10497db96d56Sopenharmony_ci method_blow_up = False 10507db96d56Sopenharmony_ci result = runTests(TestableTest) 10517db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 10527db96d56Sopenharmony_ci 'Exception: ModuleExc') 10537db96d56Sopenharmony_ci self.assertEqual(result.errors[1][1].splitlines()[-1], 10547db96d56Sopenharmony_ci 'Exception: CleanUpExc') 10557db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'cleanup_exc']) 10567db96d56Sopenharmony_ci 10577db96d56Sopenharmony_ci ordering = [] 10587db96d56Sopenharmony_ci module_blow_up = False 10597db96d56Sopenharmony_ci class_blow_up = True 10607db96d56Sopenharmony_ci method_blow_up = False 10617db96d56Sopenharmony_ci result = runTests(TestableTest) 10627db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 10637db96d56Sopenharmony_ci 'Exception: ClassExc') 10647db96d56Sopenharmony_ci self.assertEqual(result.errors[1][1].splitlines()[-1], 10657db96d56Sopenharmony_ci 'Exception: CleanUpExc') 10667db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 10677db96d56Sopenharmony_ci 'tearDownModule', 'cleanup_exc']) 10687db96d56Sopenharmony_ci 10697db96d56Sopenharmony_ci ordering = [] 10707db96d56Sopenharmony_ci module_blow_up = False 10717db96d56Sopenharmony_ci class_blow_up = False 10727db96d56Sopenharmony_ci method_blow_up = True 10737db96d56Sopenharmony_ci result = runTests(TestableTest) 10747db96d56Sopenharmony_ci self.assertEqual(result.errors[0][1].splitlines()[-1], 10757db96d56Sopenharmony_ci 'Exception: MethodExc') 10767db96d56Sopenharmony_ci self.assertEqual(result.errors[1][1].splitlines()[-1], 10777db96d56Sopenharmony_ci 'Exception: CleanUpExc') 10787db96d56Sopenharmony_ci self.assertEqual(ordering, ['setUpModule', 'setUpClass', 'setUp', 10797db96d56Sopenharmony_ci 'tearDownClass', 'tearDownModule', 10807db96d56Sopenharmony_ci 'cleanup_exc']) 10817db96d56Sopenharmony_ci 10827db96d56Sopenharmony_ci def test_module_cleanUp_with_multiple_classes(self): 10837db96d56Sopenharmony_ci ordering =[] 10847db96d56Sopenharmony_ci def cleanup1(): 10857db96d56Sopenharmony_ci ordering.append('cleanup1') 10867db96d56Sopenharmony_ci 10877db96d56Sopenharmony_ci def cleanup2(): 10887db96d56Sopenharmony_ci ordering.append('cleanup2') 10897db96d56Sopenharmony_ci 10907db96d56Sopenharmony_ci def cleanup3(): 10917db96d56Sopenharmony_ci ordering.append('cleanup3') 10927db96d56Sopenharmony_ci 10937db96d56Sopenharmony_ci class Module(object): 10947db96d56Sopenharmony_ci @staticmethod 10957db96d56Sopenharmony_ci def setUpModule(): 10967db96d56Sopenharmony_ci ordering.append('setUpModule') 10977db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanup1) 10987db96d56Sopenharmony_ci @staticmethod 10997db96d56Sopenharmony_ci def tearDownModule(): 11007db96d56Sopenharmony_ci ordering.append('tearDownModule') 11017db96d56Sopenharmony_ci 11027db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 11037db96d56Sopenharmony_ci def setUp(self): 11047db96d56Sopenharmony_ci ordering.append('setUp') 11057db96d56Sopenharmony_ci self.addCleanup(cleanup2) 11067db96d56Sopenharmony_ci def testNothing(self): 11077db96d56Sopenharmony_ci ordering.append('test') 11087db96d56Sopenharmony_ci def tearDown(self): 11097db96d56Sopenharmony_ci ordering.append('tearDown') 11107db96d56Sopenharmony_ci 11117db96d56Sopenharmony_ci class OtherTestableTest(unittest.TestCase): 11127db96d56Sopenharmony_ci def setUp(self): 11137db96d56Sopenharmony_ci ordering.append('setUp2') 11147db96d56Sopenharmony_ci self.addCleanup(cleanup3) 11157db96d56Sopenharmony_ci def testNothing(self): 11167db96d56Sopenharmony_ci ordering.append('test2') 11177db96d56Sopenharmony_ci def tearDown(self): 11187db96d56Sopenharmony_ci ordering.append('tearDown2') 11197db96d56Sopenharmony_ci 11207db96d56Sopenharmony_ci TestableTest.__module__ = 'Module' 11217db96d56Sopenharmony_ci OtherTestableTest.__module__ = 'Module' 11227db96d56Sopenharmony_ci sys.modules['Module'] = Module 11237db96d56Sopenharmony_ci runTests(TestableTest, OtherTestableTest) 11247db96d56Sopenharmony_ci self.assertEqual(ordering, 11257db96d56Sopenharmony_ci ['setUpModule', 'setUp', 'test', 'tearDown', 11267db96d56Sopenharmony_ci 'cleanup2', 'setUp2', 'test2', 'tearDown2', 11277db96d56Sopenharmony_ci 'cleanup3', 'tearDownModule', 'cleanup1']) 11287db96d56Sopenharmony_ci 11297db96d56Sopenharmony_ci def test_enterModuleContext(self): 11307db96d56Sopenharmony_ci cleanups = [] 11317db96d56Sopenharmony_ci 11327db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanups.append, 'cleanup1') 11337db96d56Sopenharmony_ci cm = TestCM(cleanups, 42) 11347db96d56Sopenharmony_ci self.assertEqual(unittest.enterModuleContext(cm), 42) 11357db96d56Sopenharmony_ci unittest.addModuleCleanup(cleanups.append, 'cleanup2') 11367db96d56Sopenharmony_ci 11377db96d56Sopenharmony_ci unittest.case.doModuleCleanups() 11387db96d56Sopenharmony_ci self.assertEqual(cleanups, ['enter', 'cleanup2', 'exit', 'cleanup1']) 11397db96d56Sopenharmony_ci 11407db96d56Sopenharmony_ci def test_enterModuleContext_arg_errors(self): 11417db96d56Sopenharmony_ci class TestableTest(unittest.TestCase): 11427db96d56Sopenharmony_ci def testNothing(self): 11437db96d56Sopenharmony_ci pass 11447db96d56Sopenharmony_ci 11457db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 11467db96d56Sopenharmony_ci unittest.enterModuleContext(LacksEnterAndExit()) 11477db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 11487db96d56Sopenharmony_ci unittest.enterModuleContext(LacksEnter()) 11497db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'the context manager'): 11507db96d56Sopenharmony_ci unittest.enterModuleContext(LacksExit()) 11517db96d56Sopenharmony_ci 11527db96d56Sopenharmony_ci self.assertEqual(unittest.case._module_cleanups, []) 11537db96d56Sopenharmony_ci 11547db96d56Sopenharmony_ci 11557db96d56Sopenharmony_ciclass Test_TextTestRunner(unittest.TestCase): 11567db96d56Sopenharmony_ci """Tests for TextTestRunner.""" 11577db96d56Sopenharmony_ci 11587db96d56Sopenharmony_ci def setUp(self): 11597db96d56Sopenharmony_ci # clean the environment from pre-existing PYTHONWARNINGS to make 11607db96d56Sopenharmony_ci # test_warnings results consistent 11617db96d56Sopenharmony_ci self.pythonwarnings = os.environ.get('PYTHONWARNINGS') 11627db96d56Sopenharmony_ci if self.pythonwarnings: 11637db96d56Sopenharmony_ci del os.environ['PYTHONWARNINGS'] 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_ci def tearDown(self): 11667db96d56Sopenharmony_ci # bring back pre-existing PYTHONWARNINGS if present 11677db96d56Sopenharmony_ci if self.pythonwarnings: 11687db96d56Sopenharmony_ci os.environ['PYTHONWARNINGS'] = self.pythonwarnings 11697db96d56Sopenharmony_ci 11707db96d56Sopenharmony_ci def test_init(self): 11717db96d56Sopenharmony_ci runner = unittest.TextTestRunner() 11727db96d56Sopenharmony_ci self.assertFalse(runner.failfast) 11737db96d56Sopenharmony_ci self.assertFalse(runner.buffer) 11747db96d56Sopenharmony_ci self.assertEqual(runner.verbosity, 1) 11757db96d56Sopenharmony_ci self.assertEqual(runner.warnings, None) 11767db96d56Sopenharmony_ci self.assertTrue(runner.descriptions) 11777db96d56Sopenharmony_ci self.assertEqual(runner.resultclass, unittest.TextTestResult) 11787db96d56Sopenharmony_ci self.assertFalse(runner.tb_locals) 11797db96d56Sopenharmony_ci 11807db96d56Sopenharmony_ci def test_multiple_inheritance(self): 11817db96d56Sopenharmony_ci class AResult(unittest.TestResult): 11827db96d56Sopenharmony_ci def __init__(self, stream, descriptions, verbosity): 11837db96d56Sopenharmony_ci super(AResult, self).__init__(stream, descriptions, verbosity) 11847db96d56Sopenharmony_ci 11857db96d56Sopenharmony_ci class ATextResult(unittest.TextTestResult, AResult): 11867db96d56Sopenharmony_ci pass 11877db96d56Sopenharmony_ci 11887db96d56Sopenharmony_ci # This used to raise an exception due to TextTestResult not passing 11897db96d56Sopenharmony_ci # on arguments in its __init__ super call 11907db96d56Sopenharmony_ci ATextResult(None, None, 1) 11917db96d56Sopenharmony_ci 11927db96d56Sopenharmony_ci def testBufferAndFailfast(self): 11937db96d56Sopenharmony_ci class Test(unittest.TestCase): 11947db96d56Sopenharmony_ci def testFoo(self): 11957db96d56Sopenharmony_ci pass 11967db96d56Sopenharmony_ci result = unittest.TestResult() 11977db96d56Sopenharmony_ci runner = unittest.TextTestRunner(stream=io.StringIO(), failfast=True, 11987db96d56Sopenharmony_ci buffer=True) 11997db96d56Sopenharmony_ci # Use our result object 12007db96d56Sopenharmony_ci runner._makeResult = lambda: result 12017db96d56Sopenharmony_ci runner.run(Test('testFoo')) 12027db96d56Sopenharmony_ci 12037db96d56Sopenharmony_ci self.assertTrue(result.failfast) 12047db96d56Sopenharmony_ci self.assertTrue(result.buffer) 12057db96d56Sopenharmony_ci 12067db96d56Sopenharmony_ci def test_locals(self): 12077db96d56Sopenharmony_ci runner = unittest.TextTestRunner(stream=io.StringIO(), tb_locals=True) 12087db96d56Sopenharmony_ci result = runner.run(unittest.TestSuite()) 12097db96d56Sopenharmony_ci self.assertEqual(True, result.tb_locals) 12107db96d56Sopenharmony_ci 12117db96d56Sopenharmony_ci def testRunnerRegistersResult(self): 12127db96d56Sopenharmony_ci class Test(unittest.TestCase): 12137db96d56Sopenharmony_ci def testFoo(self): 12147db96d56Sopenharmony_ci pass 12157db96d56Sopenharmony_ci originalRegisterResult = unittest.runner.registerResult 12167db96d56Sopenharmony_ci def cleanup(): 12177db96d56Sopenharmony_ci unittest.runner.registerResult = originalRegisterResult 12187db96d56Sopenharmony_ci self.addCleanup(cleanup) 12197db96d56Sopenharmony_ci 12207db96d56Sopenharmony_ci result = unittest.TestResult() 12217db96d56Sopenharmony_ci runner = unittest.TextTestRunner(stream=io.StringIO()) 12227db96d56Sopenharmony_ci # Use our result object 12237db96d56Sopenharmony_ci runner._makeResult = lambda: result 12247db96d56Sopenharmony_ci 12257db96d56Sopenharmony_ci self.wasRegistered = 0 12267db96d56Sopenharmony_ci def fakeRegisterResult(thisResult): 12277db96d56Sopenharmony_ci self.wasRegistered += 1 12287db96d56Sopenharmony_ci self.assertEqual(thisResult, result) 12297db96d56Sopenharmony_ci unittest.runner.registerResult = fakeRegisterResult 12307db96d56Sopenharmony_ci 12317db96d56Sopenharmony_ci runner.run(unittest.TestSuite()) 12327db96d56Sopenharmony_ci self.assertEqual(self.wasRegistered, 1) 12337db96d56Sopenharmony_ci 12347db96d56Sopenharmony_ci def test_works_with_result_without_startTestRun_stopTestRun(self): 12357db96d56Sopenharmony_ci class OldTextResult(ResultWithNoStartTestRunStopTestRun): 12367db96d56Sopenharmony_ci separator2 = '' 12377db96d56Sopenharmony_ci def printErrors(self): 12387db96d56Sopenharmony_ci pass 12397db96d56Sopenharmony_ci 12407db96d56Sopenharmony_ci class Runner(unittest.TextTestRunner): 12417db96d56Sopenharmony_ci def __init__(self): 12427db96d56Sopenharmony_ci super(Runner, self).__init__(io.StringIO()) 12437db96d56Sopenharmony_ci 12447db96d56Sopenharmony_ci def _makeResult(self): 12457db96d56Sopenharmony_ci return OldTextResult() 12467db96d56Sopenharmony_ci 12477db96d56Sopenharmony_ci runner = Runner() 12487db96d56Sopenharmony_ci runner.run(unittest.TestSuite()) 12497db96d56Sopenharmony_ci 12507db96d56Sopenharmony_ci def test_startTestRun_stopTestRun_called(self): 12517db96d56Sopenharmony_ci class LoggingTextResult(LoggingResult): 12527db96d56Sopenharmony_ci separator2 = '' 12537db96d56Sopenharmony_ci def printErrors(self): 12547db96d56Sopenharmony_ci pass 12557db96d56Sopenharmony_ci 12567db96d56Sopenharmony_ci class LoggingRunner(unittest.TextTestRunner): 12577db96d56Sopenharmony_ci def __init__(self, events): 12587db96d56Sopenharmony_ci super(LoggingRunner, self).__init__(io.StringIO()) 12597db96d56Sopenharmony_ci self._events = events 12607db96d56Sopenharmony_ci 12617db96d56Sopenharmony_ci def _makeResult(self): 12627db96d56Sopenharmony_ci return LoggingTextResult(self._events) 12637db96d56Sopenharmony_ci 12647db96d56Sopenharmony_ci events = [] 12657db96d56Sopenharmony_ci runner = LoggingRunner(events) 12667db96d56Sopenharmony_ci runner.run(unittest.TestSuite()) 12677db96d56Sopenharmony_ci expected = ['startTestRun', 'stopTestRun'] 12687db96d56Sopenharmony_ci self.assertEqual(events, expected) 12697db96d56Sopenharmony_ci 12707db96d56Sopenharmony_ci def test_pickle_unpickle(self): 12717db96d56Sopenharmony_ci # Issue #7197: a TextTestRunner should be (un)pickleable. This is 12727db96d56Sopenharmony_ci # required by test_multiprocessing under Windows (in verbose mode). 12737db96d56Sopenharmony_ci stream = io.StringIO("foo") 12747db96d56Sopenharmony_ci runner = unittest.TextTestRunner(stream) 12757db96d56Sopenharmony_ci for protocol in range(2, pickle.HIGHEST_PROTOCOL + 1): 12767db96d56Sopenharmony_ci s = pickle.dumps(runner, protocol) 12777db96d56Sopenharmony_ci obj = pickle.loads(s) 12787db96d56Sopenharmony_ci # StringIO objects never compare equal, a cheap test instead. 12797db96d56Sopenharmony_ci self.assertEqual(obj.stream.getvalue(), stream.getvalue()) 12807db96d56Sopenharmony_ci 12817db96d56Sopenharmony_ci def test_resultclass(self): 12827db96d56Sopenharmony_ci def MockResultClass(*args): 12837db96d56Sopenharmony_ci return args 12847db96d56Sopenharmony_ci STREAM = object() 12857db96d56Sopenharmony_ci DESCRIPTIONS = object() 12867db96d56Sopenharmony_ci VERBOSITY = object() 12877db96d56Sopenharmony_ci runner = unittest.TextTestRunner(STREAM, DESCRIPTIONS, VERBOSITY, 12887db96d56Sopenharmony_ci resultclass=MockResultClass) 12897db96d56Sopenharmony_ci self.assertEqual(runner.resultclass, MockResultClass) 12907db96d56Sopenharmony_ci 12917db96d56Sopenharmony_ci expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) 12927db96d56Sopenharmony_ci self.assertEqual(runner._makeResult(), expectedresult) 12937db96d56Sopenharmony_ci 12947db96d56Sopenharmony_ci @support.requires_subprocess() 12957db96d56Sopenharmony_ci def test_warnings(self): 12967db96d56Sopenharmony_ci """ 12977db96d56Sopenharmony_ci Check that warnings argument of TextTestRunner correctly affects the 12987db96d56Sopenharmony_ci behavior of the warnings. 12997db96d56Sopenharmony_ci """ 13007db96d56Sopenharmony_ci # see #10535 and the _test_warnings file for more information 13017db96d56Sopenharmony_ci 13027db96d56Sopenharmony_ci def get_parse_out_err(p): 13037db96d56Sopenharmony_ci return [b.splitlines() for b in p.communicate()] 13047db96d56Sopenharmony_ci opts = dict(stdout=subprocess.PIPE, stderr=subprocess.PIPE, 13057db96d56Sopenharmony_ci cwd=os.path.dirname(__file__)) 13067db96d56Sopenharmony_ci ae_msg = b'Please use assertEqual instead.' 13077db96d56Sopenharmony_ci at_msg = b'Please use assertTrue instead.' 13087db96d56Sopenharmony_ci 13097db96d56Sopenharmony_ci # no args -> all the warnings are printed, unittest warnings only once 13107db96d56Sopenharmony_ci p = subprocess.Popen([sys.executable, '-E', '_test_warnings.py'], **opts) 13117db96d56Sopenharmony_ci with p: 13127db96d56Sopenharmony_ci out, err = get_parse_out_err(p) 13137db96d56Sopenharmony_ci self.assertIn(b'OK', err) 13147db96d56Sopenharmony_ci # check that the total number of warnings in the output is correct 13157db96d56Sopenharmony_ci self.assertEqual(len(out), 12) 13167db96d56Sopenharmony_ci # check that the numbers of the different kind of warnings is correct 13177db96d56Sopenharmony_ci for msg in [b'dw', b'iw', b'uw']: 13187db96d56Sopenharmony_ci self.assertEqual(out.count(msg), 3) 13197db96d56Sopenharmony_ci for msg in [ae_msg, at_msg, b'rw']: 13207db96d56Sopenharmony_ci self.assertEqual(out.count(msg), 1) 13217db96d56Sopenharmony_ci 13227db96d56Sopenharmony_ci args_list = ( 13237db96d56Sopenharmony_ci # passing 'ignore' as warnings arg -> no warnings 13247db96d56Sopenharmony_ci [sys.executable, '_test_warnings.py', 'ignore'], 13257db96d56Sopenharmony_ci # -W doesn't affect the result if the arg is passed 13267db96d56Sopenharmony_ci [sys.executable, '-Wa', '_test_warnings.py', 'ignore'], 13277db96d56Sopenharmony_ci # -W affects the result if the arg is not passed 13287db96d56Sopenharmony_ci [sys.executable, '-Wi', '_test_warnings.py'] 13297db96d56Sopenharmony_ci ) 13307db96d56Sopenharmony_ci # in all these cases no warnings are printed 13317db96d56Sopenharmony_ci for args in args_list: 13327db96d56Sopenharmony_ci p = subprocess.Popen(args, **opts) 13337db96d56Sopenharmony_ci with p: 13347db96d56Sopenharmony_ci out, err = get_parse_out_err(p) 13357db96d56Sopenharmony_ci self.assertIn(b'OK', err) 13367db96d56Sopenharmony_ci self.assertEqual(len(out), 0) 13377db96d56Sopenharmony_ci 13387db96d56Sopenharmony_ci 13397db96d56Sopenharmony_ci # passing 'always' as warnings arg -> all the warnings printed, 13407db96d56Sopenharmony_ci # unittest warnings only once 13417db96d56Sopenharmony_ci p = subprocess.Popen([sys.executable, '_test_warnings.py', 'always'], 13427db96d56Sopenharmony_ci **opts) 13437db96d56Sopenharmony_ci with p: 13447db96d56Sopenharmony_ci out, err = get_parse_out_err(p) 13457db96d56Sopenharmony_ci self.assertIn(b'OK', err) 13467db96d56Sopenharmony_ci self.assertEqual(len(out), 14) 13477db96d56Sopenharmony_ci for msg in [b'dw', b'iw', b'uw', b'rw']: 13487db96d56Sopenharmony_ci self.assertEqual(out.count(msg), 3) 13497db96d56Sopenharmony_ci for msg in [ae_msg, at_msg]: 13507db96d56Sopenharmony_ci self.assertEqual(out.count(msg), 1) 13517db96d56Sopenharmony_ci 13527db96d56Sopenharmony_ci def testStdErrLookedUpAtInstantiationTime(self): 13537db96d56Sopenharmony_ci # see issue 10786 13547db96d56Sopenharmony_ci old_stderr = sys.stderr 13557db96d56Sopenharmony_ci f = io.StringIO() 13567db96d56Sopenharmony_ci sys.stderr = f 13577db96d56Sopenharmony_ci try: 13587db96d56Sopenharmony_ci runner = unittest.TextTestRunner() 13597db96d56Sopenharmony_ci self.assertTrue(runner.stream.stream is f) 13607db96d56Sopenharmony_ci finally: 13617db96d56Sopenharmony_ci sys.stderr = old_stderr 13627db96d56Sopenharmony_ci 13637db96d56Sopenharmony_ci def testSpecifiedStreamUsed(self): 13647db96d56Sopenharmony_ci # see issue 10786 13657db96d56Sopenharmony_ci f = io.StringIO() 13667db96d56Sopenharmony_ci runner = unittest.TextTestRunner(f) 13677db96d56Sopenharmony_ci self.assertTrue(runner.stream.stream is f) 13687db96d56Sopenharmony_ci 13697db96d56Sopenharmony_ci 13707db96d56Sopenharmony_ciif __name__ == "__main__": 13717db96d56Sopenharmony_ci unittest.main() 1372