17db96d56Sopenharmony_ciimport io 27db96d56Sopenharmony_ciimport sys 37db96d56Sopenharmony_ciimport textwrap 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_cifrom test.support import warnings_helper, captured_stdout, captured_stderr 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ciimport traceback 87db96d56Sopenharmony_ciimport unittest 97db96d56Sopenharmony_cifrom unittest.util import strclass 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ciclass MockTraceback(object): 137db96d56Sopenharmony_ci class TracebackException: 147db96d56Sopenharmony_ci def __init__(self, *args, **kwargs): 157db96d56Sopenharmony_ci self.capture_locals = kwargs.get('capture_locals', False) 167db96d56Sopenharmony_ci def format(self): 177db96d56Sopenharmony_ci result = ['A traceback'] 187db96d56Sopenharmony_ci if self.capture_locals: 197db96d56Sopenharmony_ci result.append('locals') 207db96d56Sopenharmony_ci return result 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_cidef restore_traceback(): 237db96d56Sopenharmony_ci unittest.result.traceback = traceback 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_cidef bad_cleanup1(): 277db96d56Sopenharmony_ci print('do cleanup1') 287db96d56Sopenharmony_ci raise TypeError('bad cleanup1') 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_cidef bad_cleanup2(): 327db96d56Sopenharmony_ci print('do cleanup2') 337db96d56Sopenharmony_ci raise ValueError('bad cleanup2') 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ciclass BufferedWriter: 377db96d56Sopenharmony_ci def __init__(self): 387db96d56Sopenharmony_ci self.result = '' 397db96d56Sopenharmony_ci self.buffer = '' 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci def write(self, arg): 427db96d56Sopenharmony_ci self.buffer += arg 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci def flush(self): 457db96d56Sopenharmony_ci self.result += self.buffer 467db96d56Sopenharmony_ci self.buffer = '' 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci def getvalue(self): 497db96d56Sopenharmony_ci return self.result 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ciclass Test_TestResult(unittest.TestCase): 537db96d56Sopenharmony_ci # Note: there are not separate tests for TestResult.wasSuccessful(), 547db96d56Sopenharmony_ci # TestResult.errors, TestResult.failures, TestResult.testsRun or 557db96d56Sopenharmony_ci # TestResult.shouldStop because these only have meaning in terms of 567db96d56Sopenharmony_ci # other TestResult methods. 577db96d56Sopenharmony_ci # 587db96d56Sopenharmony_ci # Accordingly, tests for the aforenamed attributes are incorporated 597db96d56Sopenharmony_ci # in with the tests for the defining methods. 607db96d56Sopenharmony_ci ################################################################ 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci def test_init(self): 637db96d56Sopenharmony_ci result = unittest.TestResult() 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci self.assertTrue(result.wasSuccessful()) 667db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 0) 677db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 0) 687db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 0) 697db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 707db96d56Sopenharmony_ci self.assertIsNone(result._stdout_buffer) 717db96d56Sopenharmony_ci self.assertIsNone(result._stderr_buffer) 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci # "This method can be called to signal that the set of tests being 747db96d56Sopenharmony_ci # run should be aborted by setting the TestResult's shouldStop 757db96d56Sopenharmony_ci # attribute to True." 767db96d56Sopenharmony_ci def test_stop(self): 777db96d56Sopenharmony_ci result = unittest.TestResult() 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci result.stop() 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, True) 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci # "Called when the test case test is about to be run. The default 847db96d56Sopenharmony_ci # implementation simply increments the instance's testsRun counter." 857db96d56Sopenharmony_ci def test_startTest(self): 867db96d56Sopenharmony_ci class Foo(unittest.TestCase): 877db96d56Sopenharmony_ci def test_1(self): 887db96d56Sopenharmony_ci pass 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci test = Foo('test_1') 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci result = unittest.TestResult() 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci result.startTest(test) 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci self.assertTrue(result.wasSuccessful()) 977db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 0) 987db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 0) 997db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 1007db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci result.stopTest(test) 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci # "Called after the test case test has been executed, regardless of 1057db96d56Sopenharmony_ci # the outcome. The default implementation does nothing." 1067db96d56Sopenharmony_ci def test_stopTest(self): 1077db96d56Sopenharmony_ci class Foo(unittest.TestCase): 1087db96d56Sopenharmony_ci def test_1(self): 1097db96d56Sopenharmony_ci pass 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci test = Foo('test_1') 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci result = unittest.TestResult() 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci result.startTest(test) 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci self.assertTrue(result.wasSuccessful()) 1187db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 0) 1197db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 0) 1207db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 1217db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci result.stopTest(test) 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci # Same tests as above; make sure nothing has changed 1267db96d56Sopenharmony_ci self.assertTrue(result.wasSuccessful()) 1277db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 0) 1287db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 0) 1297db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 1307db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci # "Called before and after tests are run. The default implementation does nothing." 1337db96d56Sopenharmony_ci def test_startTestRun_stopTestRun(self): 1347db96d56Sopenharmony_ci result = unittest.TestResult() 1357db96d56Sopenharmony_ci result.startTestRun() 1367db96d56Sopenharmony_ci result.stopTestRun() 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci # "addSuccess(test)" 1397db96d56Sopenharmony_ci # ... 1407db96d56Sopenharmony_ci # "Called when the test case test succeeds" 1417db96d56Sopenharmony_ci # ... 1427db96d56Sopenharmony_ci # "wasSuccessful() - Returns True if all tests run so far have passed, 1437db96d56Sopenharmony_ci # otherwise returns False" 1447db96d56Sopenharmony_ci # ... 1457db96d56Sopenharmony_ci # "testsRun - The total number of tests run so far." 1467db96d56Sopenharmony_ci # ... 1477db96d56Sopenharmony_ci # "errors - A list containing 2-tuples of TestCase instances and 1487db96d56Sopenharmony_ci # formatted tracebacks. Each tuple represents a test which raised an 1497db96d56Sopenharmony_ci # unexpected exception. Contains formatted 1507db96d56Sopenharmony_ci # tracebacks instead of sys.exc_info() results." 1517db96d56Sopenharmony_ci # ... 1527db96d56Sopenharmony_ci # "failures - A list containing 2-tuples of TestCase instances and 1537db96d56Sopenharmony_ci # formatted tracebacks. Each tuple represents a test where a failure was 1547db96d56Sopenharmony_ci # explicitly signalled using the TestCase.fail*() or TestCase.assert*() 1557db96d56Sopenharmony_ci # methods. Contains formatted tracebacks instead 1567db96d56Sopenharmony_ci # of sys.exc_info() results." 1577db96d56Sopenharmony_ci def test_addSuccess(self): 1587db96d56Sopenharmony_ci class Foo(unittest.TestCase): 1597db96d56Sopenharmony_ci def test_1(self): 1607db96d56Sopenharmony_ci pass 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci test = Foo('test_1') 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci result = unittest.TestResult() 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ci result.startTest(test) 1677db96d56Sopenharmony_ci result.addSuccess(test) 1687db96d56Sopenharmony_ci result.stopTest(test) 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci self.assertTrue(result.wasSuccessful()) 1717db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 0) 1727db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 0) 1737db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 1747db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci # "addFailure(test, err)" 1777db96d56Sopenharmony_ci # ... 1787db96d56Sopenharmony_ci # "Called when the test case test signals a failure. err is a tuple of 1797db96d56Sopenharmony_ci # the form returned by sys.exc_info(): (type, value, traceback)" 1807db96d56Sopenharmony_ci # ... 1817db96d56Sopenharmony_ci # "wasSuccessful() - Returns True if all tests run so far have passed, 1827db96d56Sopenharmony_ci # otherwise returns False" 1837db96d56Sopenharmony_ci # ... 1847db96d56Sopenharmony_ci # "testsRun - The total number of tests run so far." 1857db96d56Sopenharmony_ci # ... 1867db96d56Sopenharmony_ci # "errors - A list containing 2-tuples of TestCase instances and 1877db96d56Sopenharmony_ci # formatted tracebacks. Each tuple represents a test which raised an 1887db96d56Sopenharmony_ci # unexpected exception. Contains formatted 1897db96d56Sopenharmony_ci # tracebacks instead of sys.exc_info() results." 1907db96d56Sopenharmony_ci # ... 1917db96d56Sopenharmony_ci # "failures - A list containing 2-tuples of TestCase instances and 1927db96d56Sopenharmony_ci # formatted tracebacks. Each tuple represents a test where a failure was 1937db96d56Sopenharmony_ci # explicitly signalled using the TestCase.fail*() or TestCase.assert*() 1947db96d56Sopenharmony_ci # methods. Contains formatted tracebacks instead 1957db96d56Sopenharmony_ci # of sys.exc_info() results." 1967db96d56Sopenharmony_ci def test_addFailure(self): 1977db96d56Sopenharmony_ci class Foo(unittest.TestCase): 1987db96d56Sopenharmony_ci def test_1(self): 1997db96d56Sopenharmony_ci pass 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci test = Foo('test_1') 2027db96d56Sopenharmony_ci try: 2037db96d56Sopenharmony_ci test.fail("foo") 2047db96d56Sopenharmony_ci except: 2057db96d56Sopenharmony_ci exc_info_tuple = sys.exc_info() 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci result = unittest.TestResult() 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci result.startTest(test) 2107db96d56Sopenharmony_ci result.addFailure(test, exc_info_tuple) 2117db96d56Sopenharmony_ci result.stopTest(test) 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ci self.assertFalse(result.wasSuccessful()) 2147db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 0) 2157db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 1) 2167db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 2177db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci test_case, formatted_exc = result.failures[0] 2207db96d56Sopenharmony_ci self.assertIs(test_case, test) 2217db96d56Sopenharmony_ci self.assertIsInstance(formatted_exc, str) 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci def test_addFailure_filter_traceback_frames(self): 2247db96d56Sopenharmony_ci class Foo(unittest.TestCase): 2257db96d56Sopenharmony_ci def test_1(self): 2267db96d56Sopenharmony_ci pass 2277db96d56Sopenharmony_ci 2287db96d56Sopenharmony_ci test = Foo('test_1') 2297db96d56Sopenharmony_ci def get_exc_info(): 2307db96d56Sopenharmony_ci try: 2317db96d56Sopenharmony_ci test.fail("foo") 2327db96d56Sopenharmony_ci except: 2337db96d56Sopenharmony_ci return sys.exc_info() 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci exc_info_tuple = get_exc_info() 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci full_exc = traceback.format_exception(*exc_info_tuple) 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci result = unittest.TestResult() 2407db96d56Sopenharmony_ci result.startTest(test) 2417db96d56Sopenharmony_ci result.addFailure(test, exc_info_tuple) 2427db96d56Sopenharmony_ci result.stopTest(test) 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci formatted_exc = result.failures[0][1] 2457db96d56Sopenharmony_ci dropped = [l for l in full_exc if l not in formatted_exc] 2467db96d56Sopenharmony_ci self.assertEqual(len(dropped), 1) 2477db96d56Sopenharmony_ci self.assertIn("raise self.failureException(msg)", dropped[0]) 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci def test_addFailure_filter_traceback_frames_context(self): 2507db96d56Sopenharmony_ci class Foo(unittest.TestCase): 2517db96d56Sopenharmony_ci def test_1(self): 2527db96d56Sopenharmony_ci pass 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci test = Foo('test_1') 2557db96d56Sopenharmony_ci def get_exc_info(): 2567db96d56Sopenharmony_ci try: 2577db96d56Sopenharmony_ci try: 2587db96d56Sopenharmony_ci test.fail("foo") 2597db96d56Sopenharmony_ci except: 2607db96d56Sopenharmony_ci raise ValueError(42) 2617db96d56Sopenharmony_ci except: 2627db96d56Sopenharmony_ci return sys.exc_info() 2637db96d56Sopenharmony_ci 2647db96d56Sopenharmony_ci exc_info_tuple = get_exc_info() 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci full_exc = traceback.format_exception(*exc_info_tuple) 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci result = unittest.TestResult() 2697db96d56Sopenharmony_ci result.startTest(test) 2707db96d56Sopenharmony_ci result.addFailure(test, exc_info_tuple) 2717db96d56Sopenharmony_ci result.stopTest(test) 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci formatted_exc = result.failures[0][1] 2747db96d56Sopenharmony_ci dropped = [l for l in full_exc if l not in formatted_exc] 2757db96d56Sopenharmony_ci self.assertEqual(len(dropped), 1) 2767db96d56Sopenharmony_ci self.assertIn("raise self.failureException(msg)", dropped[0]) 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ci def test_addFailure_filter_traceback_frames_chained_exception_self_loop(self): 2797db96d56Sopenharmony_ci class Foo(unittest.TestCase): 2807db96d56Sopenharmony_ci def test_1(self): 2817db96d56Sopenharmony_ci pass 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci def get_exc_info(): 2847db96d56Sopenharmony_ci try: 2857db96d56Sopenharmony_ci loop = Exception("Loop") 2867db96d56Sopenharmony_ci loop.__cause__ = loop 2877db96d56Sopenharmony_ci loop.__context__ = loop 2887db96d56Sopenharmony_ci raise loop 2897db96d56Sopenharmony_ci except: 2907db96d56Sopenharmony_ci return sys.exc_info() 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ci exc_info_tuple = get_exc_info() 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci test = Foo('test_1') 2957db96d56Sopenharmony_ci result = unittest.TestResult() 2967db96d56Sopenharmony_ci result.startTest(test) 2977db96d56Sopenharmony_ci result.addFailure(test, exc_info_tuple) 2987db96d56Sopenharmony_ci result.stopTest(test) 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ci formatted_exc = result.failures[0][1] 3017db96d56Sopenharmony_ci self.assertEqual(formatted_exc.count("Exception: Loop\n"), 1) 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_ci def test_addFailure_filter_traceback_frames_chained_exception_cycle(self): 3047db96d56Sopenharmony_ci class Foo(unittest.TestCase): 3057db96d56Sopenharmony_ci def test_1(self): 3067db96d56Sopenharmony_ci pass 3077db96d56Sopenharmony_ci 3087db96d56Sopenharmony_ci def get_exc_info(): 3097db96d56Sopenharmony_ci try: 3107db96d56Sopenharmony_ci # Create two directionally opposed cycles 3117db96d56Sopenharmony_ci # __cause__ in one direction, __context__ in the other 3127db96d56Sopenharmony_ci A, B, C = Exception("A"), Exception("B"), Exception("C") 3137db96d56Sopenharmony_ci edges = [(C, B), (B, A), (A, C)] 3147db96d56Sopenharmony_ci for ex1, ex2 in edges: 3157db96d56Sopenharmony_ci ex1.__cause__ = ex2 3167db96d56Sopenharmony_ci ex2.__context__ = ex1 3177db96d56Sopenharmony_ci raise C 3187db96d56Sopenharmony_ci except: 3197db96d56Sopenharmony_ci return sys.exc_info() 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci exc_info_tuple = get_exc_info() 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci test = Foo('test_1') 3247db96d56Sopenharmony_ci result = unittest.TestResult() 3257db96d56Sopenharmony_ci result.startTest(test) 3267db96d56Sopenharmony_ci result.addFailure(test, exc_info_tuple) 3277db96d56Sopenharmony_ci result.stopTest(test) 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci formatted_exc = result.failures[0][1] 3307db96d56Sopenharmony_ci self.assertEqual(formatted_exc.count("Exception: A\n"), 1) 3317db96d56Sopenharmony_ci self.assertEqual(formatted_exc.count("Exception: B\n"), 1) 3327db96d56Sopenharmony_ci self.assertEqual(formatted_exc.count("Exception: C\n"), 1) 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci # "addError(test, err)" 3357db96d56Sopenharmony_ci # ... 3367db96d56Sopenharmony_ci # "Called when the test case test raises an unexpected exception err 3377db96d56Sopenharmony_ci # is a tuple of the form returned by sys.exc_info(): 3387db96d56Sopenharmony_ci # (type, value, traceback)" 3397db96d56Sopenharmony_ci # ... 3407db96d56Sopenharmony_ci # "wasSuccessful() - Returns True if all tests run so far have passed, 3417db96d56Sopenharmony_ci # otherwise returns False" 3427db96d56Sopenharmony_ci # ... 3437db96d56Sopenharmony_ci # "testsRun - The total number of tests run so far." 3447db96d56Sopenharmony_ci # ... 3457db96d56Sopenharmony_ci # "errors - A list containing 2-tuples of TestCase instances and 3467db96d56Sopenharmony_ci # formatted tracebacks. Each tuple represents a test which raised an 3477db96d56Sopenharmony_ci # unexpected exception. Contains formatted 3487db96d56Sopenharmony_ci # tracebacks instead of sys.exc_info() results." 3497db96d56Sopenharmony_ci # ... 3507db96d56Sopenharmony_ci # "failures - A list containing 2-tuples of TestCase instances and 3517db96d56Sopenharmony_ci # formatted tracebacks. Each tuple represents a test where a failure was 3527db96d56Sopenharmony_ci # explicitly signalled using the TestCase.fail*() or TestCase.assert*() 3537db96d56Sopenharmony_ci # methods. Contains formatted tracebacks instead 3547db96d56Sopenharmony_ci # of sys.exc_info() results." 3557db96d56Sopenharmony_ci def test_addError(self): 3567db96d56Sopenharmony_ci class Foo(unittest.TestCase): 3577db96d56Sopenharmony_ci def test_1(self): 3587db96d56Sopenharmony_ci pass 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci test = Foo('test_1') 3617db96d56Sopenharmony_ci try: 3627db96d56Sopenharmony_ci raise TypeError() 3637db96d56Sopenharmony_ci except: 3647db96d56Sopenharmony_ci exc_info_tuple = sys.exc_info() 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci result = unittest.TestResult() 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ci result.startTest(test) 3697db96d56Sopenharmony_ci result.addError(test, exc_info_tuple) 3707db96d56Sopenharmony_ci result.stopTest(test) 3717db96d56Sopenharmony_ci 3727db96d56Sopenharmony_ci self.assertFalse(result.wasSuccessful()) 3737db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 3747db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 0) 3757db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 3767db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 3777db96d56Sopenharmony_ci 3787db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 3797db96d56Sopenharmony_ci self.assertIs(test_case, test) 3807db96d56Sopenharmony_ci self.assertIsInstance(formatted_exc, str) 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci def test_addError_locals(self): 3837db96d56Sopenharmony_ci class Foo(unittest.TestCase): 3847db96d56Sopenharmony_ci def test_1(self): 3857db96d56Sopenharmony_ci 1/0 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci test = Foo('test_1') 3887db96d56Sopenharmony_ci result = unittest.TestResult() 3897db96d56Sopenharmony_ci result.tb_locals = True 3907db96d56Sopenharmony_ci 3917db96d56Sopenharmony_ci unittest.result.traceback = MockTraceback 3927db96d56Sopenharmony_ci self.addCleanup(restore_traceback) 3937db96d56Sopenharmony_ci result.startTestRun() 3947db96d56Sopenharmony_ci test.run(result) 3957db96d56Sopenharmony_ci result.stopTestRun() 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 3987db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 3997db96d56Sopenharmony_ci self.assertEqual('A tracebacklocals', formatted_exc) 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci def test_addSubTest(self): 4027db96d56Sopenharmony_ci class Foo(unittest.TestCase): 4037db96d56Sopenharmony_ci def test_1(self): 4047db96d56Sopenharmony_ci nonlocal subtest 4057db96d56Sopenharmony_ci with self.subTest(foo=1): 4067db96d56Sopenharmony_ci subtest = self._subtest 4077db96d56Sopenharmony_ci try: 4087db96d56Sopenharmony_ci 1/0 4097db96d56Sopenharmony_ci except ZeroDivisionError: 4107db96d56Sopenharmony_ci exc_info_tuple = sys.exc_info() 4117db96d56Sopenharmony_ci # Register an error by hand (to check the API) 4127db96d56Sopenharmony_ci result.addSubTest(test, subtest, exc_info_tuple) 4137db96d56Sopenharmony_ci # Now trigger a failure 4147db96d56Sopenharmony_ci self.fail("some recognizable failure") 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ci subtest = None 4177db96d56Sopenharmony_ci test = Foo('test_1') 4187db96d56Sopenharmony_ci result = unittest.TestResult() 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci test.run(result) 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci self.assertFalse(result.wasSuccessful()) 4237db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 4247db96d56Sopenharmony_ci self.assertEqual(len(result.failures), 1) 4257db96d56Sopenharmony_ci self.assertEqual(result.testsRun, 1) 4267db96d56Sopenharmony_ci self.assertEqual(result.shouldStop, False) 4277db96d56Sopenharmony_ci 4287db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 4297db96d56Sopenharmony_ci self.assertIs(test_case, subtest) 4307db96d56Sopenharmony_ci self.assertIn("ZeroDivisionError", formatted_exc) 4317db96d56Sopenharmony_ci test_case, formatted_exc = result.failures[0] 4327db96d56Sopenharmony_ci self.assertIs(test_case, subtest) 4337db96d56Sopenharmony_ci self.assertIn("some recognizable failure", formatted_exc) 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ci def testStackFrameTrimming(self): 4367db96d56Sopenharmony_ci class Frame(object): 4377db96d56Sopenharmony_ci class tb_frame(object): 4387db96d56Sopenharmony_ci f_globals = {} 4397db96d56Sopenharmony_ci result = unittest.TestResult() 4407db96d56Sopenharmony_ci self.assertFalse(result._is_relevant_tb_level(Frame)) 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci Frame.tb_frame.f_globals['__unittest'] = True 4437db96d56Sopenharmony_ci self.assertTrue(result._is_relevant_tb_level(Frame)) 4447db96d56Sopenharmony_ci 4457db96d56Sopenharmony_ci def testFailFast(self): 4467db96d56Sopenharmony_ci result = unittest.TestResult() 4477db96d56Sopenharmony_ci result._exc_info_to_string = lambda *_: '' 4487db96d56Sopenharmony_ci result.failfast = True 4497db96d56Sopenharmony_ci result.addError(None, None) 4507db96d56Sopenharmony_ci self.assertTrue(result.shouldStop) 4517db96d56Sopenharmony_ci 4527db96d56Sopenharmony_ci result = unittest.TestResult() 4537db96d56Sopenharmony_ci result._exc_info_to_string = lambda *_: '' 4547db96d56Sopenharmony_ci result.failfast = True 4557db96d56Sopenharmony_ci result.addFailure(None, None) 4567db96d56Sopenharmony_ci self.assertTrue(result.shouldStop) 4577db96d56Sopenharmony_ci 4587db96d56Sopenharmony_ci result = unittest.TestResult() 4597db96d56Sopenharmony_ci result._exc_info_to_string = lambda *_: '' 4607db96d56Sopenharmony_ci result.failfast = True 4617db96d56Sopenharmony_ci result.addUnexpectedSuccess(None) 4627db96d56Sopenharmony_ci self.assertTrue(result.shouldStop) 4637db96d56Sopenharmony_ci 4647db96d56Sopenharmony_ci def testFailFastSetByRunner(self): 4657db96d56Sopenharmony_ci stream = BufferedWriter() 4667db96d56Sopenharmony_ci runner = unittest.TextTestRunner(stream=stream, failfast=True) 4677db96d56Sopenharmony_ci def test(result): 4687db96d56Sopenharmony_ci self.assertTrue(result.failfast) 4697db96d56Sopenharmony_ci result = runner.run(test) 4707db96d56Sopenharmony_ci stream.flush() 4717db96d56Sopenharmony_ci self.assertTrue(stream.getvalue().endswith('\n\nOK\n')) 4727db96d56Sopenharmony_ci 4737db96d56Sopenharmony_ci 4747db96d56Sopenharmony_ciclass Test_TextTestResult(unittest.TestCase): 4757db96d56Sopenharmony_ci maxDiff = None 4767db96d56Sopenharmony_ci 4777db96d56Sopenharmony_ci def testGetDescriptionWithoutDocstring(self): 4787db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 4797db96d56Sopenharmony_ci self.assertEqual( 4807db96d56Sopenharmony_ci result.getDescription(self), 4817db96d56Sopenharmony_ci 'testGetDescriptionWithoutDocstring (' + __name__ + 4827db96d56Sopenharmony_ci '.Test_TextTestResult.testGetDescriptionWithoutDocstring)') 4837db96d56Sopenharmony_ci 4847db96d56Sopenharmony_ci def testGetSubTestDescriptionWithoutDocstring(self): 4857db96d56Sopenharmony_ci with self.subTest(foo=1, bar=2): 4867db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 4877db96d56Sopenharmony_ci self.assertEqual( 4887db96d56Sopenharmony_ci result.getDescription(self._subtest), 4897db96d56Sopenharmony_ci 'testGetSubTestDescriptionWithoutDocstring (' + __name__ + 4907db96d56Sopenharmony_ci '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstring) (foo=1, bar=2)') 4917db96d56Sopenharmony_ci 4927db96d56Sopenharmony_ci with self.subTest('some message'): 4937db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 4947db96d56Sopenharmony_ci self.assertEqual( 4957db96d56Sopenharmony_ci result.getDescription(self._subtest), 4967db96d56Sopenharmony_ci 'testGetSubTestDescriptionWithoutDocstring (' + __name__ + 4977db96d56Sopenharmony_ci '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstring) [some message]') 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_ci def testGetSubTestDescriptionWithoutDocstringAndParams(self): 5007db96d56Sopenharmony_ci with self.subTest(): 5017db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5027db96d56Sopenharmony_ci self.assertEqual( 5037db96d56Sopenharmony_ci result.getDescription(self._subtest), 5047db96d56Sopenharmony_ci 'testGetSubTestDescriptionWithoutDocstringAndParams ' 5057db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstringAndParams) ' 5067db96d56Sopenharmony_ci '(<subtest>)') 5077db96d56Sopenharmony_ci 5087db96d56Sopenharmony_ci def testGetSubTestDescriptionForFalsyValues(self): 5097db96d56Sopenharmony_ci expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TextTestResult.testGetSubTestDescriptionForFalsyValues) [%s]' 5107db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5117db96d56Sopenharmony_ci for arg in [0, None, []]: 5127db96d56Sopenharmony_ci with self.subTest(arg): 5137db96d56Sopenharmony_ci self.assertEqual( 5147db96d56Sopenharmony_ci result.getDescription(self._subtest), 5157db96d56Sopenharmony_ci expected % (__name__, arg) 5167db96d56Sopenharmony_ci ) 5177db96d56Sopenharmony_ci 5187db96d56Sopenharmony_ci def testGetNestedSubTestDescriptionWithoutDocstring(self): 5197db96d56Sopenharmony_ci with self.subTest(foo=1): 5207db96d56Sopenharmony_ci with self.subTest(baz=2, bar=3): 5217db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5227db96d56Sopenharmony_ci self.assertEqual( 5237db96d56Sopenharmony_ci result.getDescription(self._subtest), 5247db96d56Sopenharmony_ci 'testGetNestedSubTestDescriptionWithoutDocstring ' 5257db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetNestedSubTestDescriptionWithoutDocstring) ' 5267db96d56Sopenharmony_ci '(baz=2, bar=3, foo=1)') 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci def testGetDuplicatedNestedSubTestDescriptionWithoutDocstring(self): 5297db96d56Sopenharmony_ci with self.subTest(foo=1, bar=2): 5307db96d56Sopenharmony_ci with self.subTest(baz=3, bar=4): 5317db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5327db96d56Sopenharmony_ci self.assertEqual( 5337db96d56Sopenharmony_ci result.getDescription(self._subtest), 5347db96d56Sopenharmony_ci 'testGetDuplicatedNestedSubTestDescriptionWithoutDocstring ' 5357db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetDuplicatedNestedSubTestDescriptionWithoutDocstring) (baz=3, bar=4, foo=1)') 5367db96d56Sopenharmony_ci 5377db96d56Sopenharmony_ci @unittest.skipIf(sys.flags.optimize >= 2, 5387db96d56Sopenharmony_ci "Docstrings are omitted with -O2 and above") 5397db96d56Sopenharmony_ci def testGetDescriptionWithOneLineDocstring(self): 5407db96d56Sopenharmony_ci """Tests getDescription() for a method with a docstring.""" 5417db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5427db96d56Sopenharmony_ci self.assertEqual( 5437db96d56Sopenharmony_ci result.getDescription(self), 5447db96d56Sopenharmony_ci ('testGetDescriptionWithOneLineDocstring ' 5457db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetDescriptionWithOneLineDocstring)\n' 5467db96d56Sopenharmony_ci 'Tests getDescription() for a method with a docstring.')) 5477db96d56Sopenharmony_ci 5487db96d56Sopenharmony_ci @unittest.skipIf(sys.flags.optimize >= 2, 5497db96d56Sopenharmony_ci "Docstrings are omitted with -O2 and above") 5507db96d56Sopenharmony_ci def testGetSubTestDescriptionWithOneLineDocstring(self): 5517db96d56Sopenharmony_ci """Tests getDescription() for a method with a docstring.""" 5527db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5537db96d56Sopenharmony_ci with self.subTest(foo=1, bar=2): 5547db96d56Sopenharmony_ci self.assertEqual( 5557db96d56Sopenharmony_ci result.getDescription(self._subtest), 5567db96d56Sopenharmony_ci ('testGetSubTestDescriptionWithOneLineDocstring ' 5577db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithOneLineDocstring) ' 5587db96d56Sopenharmony_ci '(foo=1, bar=2)\n' 5597db96d56Sopenharmony_ci 5607db96d56Sopenharmony_ci 'Tests getDescription() for a method with a docstring.')) 5617db96d56Sopenharmony_ci 5627db96d56Sopenharmony_ci @unittest.skipIf(sys.flags.optimize >= 2, 5637db96d56Sopenharmony_ci "Docstrings are omitted with -O2 and above") 5647db96d56Sopenharmony_ci def testGetDescriptionWithMultiLineDocstring(self): 5657db96d56Sopenharmony_ci """Tests getDescription() for a method with a longer docstring. 5667db96d56Sopenharmony_ci The second line of the docstring. 5677db96d56Sopenharmony_ci """ 5687db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5697db96d56Sopenharmony_ci self.assertEqual( 5707db96d56Sopenharmony_ci result.getDescription(self), 5717db96d56Sopenharmony_ci ('testGetDescriptionWithMultiLineDocstring ' 5727db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetDescriptionWithMultiLineDocstring)\n' 5737db96d56Sopenharmony_ci 'Tests getDescription() for a method with a longer ' 5747db96d56Sopenharmony_ci 'docstring.')) 5757db96d56Sopenharmony_ci 5767db96d56Sopenharmony_ci @unittest.skipIf(sys.flags.optimize >= 2, 5777db96d56Sopenharmony_ci "Docstrings are omitted with -O2 and above") 5787db96d56Sopenharmony_ci def testGetSubTestDescriptionWithMultiLineDocstring(self): 5797db96d56Sopenharmony_ci """Tests getDescription() for a method with a longer docstring. 5807db96d56Sopenharmony_ci The second line of the docstring. 5817db96d56Sopenharmony_ci """ 5827db96d56Sopenharmony_ci result = unittest.TextTestResult(None, True, 1) 5837db96d56Sopenharmony_ci with self.subTest(foo=1, bar=2): 5847db96d56Sopenharmony_ci self.assertEqual( 5857db96d56Sopenharmony_ci result.getDescription(self._subtest), 5867db96d56Sopenharmony_ci ('testGetSubTestDescriptionWithMultiLineDocstring ' 5877db96d56Sopenharmony_ci '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithMultiLineDocstring) ' 5887db96d56Sopenharmony_ci '(foo=1, bar=2)\n' 5897db96d56Sopenharmony_ci 'Tests getDescription() for a method with a longer ' 5907db96d56Sopenharmony_ci 'docstring.')) 5917db96d56Sopenharmony_ci 5927db96d56Sopenharmony_ci class Test(unittest.TestCase): 5937db96d56Sopenharmony_ci def testSuccess(self): 5947db96d56Sopenharmony_ci pass 5957db96d56Sopenharmony_ci def testSkip(self): 5967db96d56Sopenharmony_ci self.skipTest('skip') 5977db96d56Sopenharmony_ci def testFail(self): 5987db96d56Sopenharmony_ci self.fail('fail') 5997db96d56Sopenharmony_ci def testError(self): 6007db96d56Sopenharmony_ci raise Exception('error') 6017db96d56Sopenharmony_ci @unittest.expectedFailure 6027db96d56Sopenharmony_ci def testExpectedFailure(self): 6037db96d56Sopenharmony_ci self.fail('fail') 6047db96d56Sopenharmony_ci @unittest.expectedFailure 6057db96d56Sopenharmony_ci def testUnexpectedSuccess(self): 6067db96d56Sopenharmony_ci pass 6077db96d56Sopenharmony_ci def testSubTestSuccess(self): 6087db96d56Sopenharmony_ci with self.subTest('one', a=1): 6097db96d56Sopenharmony_ci pass 6107db96d56Sopenharmony_ci with self.subTest('two', b=2): 6117db96d56Sopenharmony_ci pass 6127db96d56Sopenharmony_ci def testSubTestMixed(self): 6137db96d56Sopenharmony_ci with self.subTest('success', a=1): 6147db96d56Sopenharmony_ci pass 6157db96d56Sopenharmony_ci with self.subTest('skip', b=2): 6167db96d56Sopenharmony_ci self.skipTest('skip') 6177db96d56Sopenharmony_ci with self.subTest('fail', c=3): 6187db96d56Sopenharmony_ci self.fail('fail') 6197db96d56Sopenharmony_ci with self.subTest('error', d=4): 6207db96d56Sopenharmony_ci raise Exception('error') 6217db96d56Sopenharmony_ci 6227db96d56Sopenharmony_ci tearDownError = None 6237db96d56Sopenharmony_ci def tearDown(self): 6247db96d56Sopenharmony_ci if self.tearDownError is not None: 6257db96d56Sopenharmony_ci raise self.tearDownError 6267db96d56Sopenharmony_ci 6277db96d56Sopenharmony_ci def _run_test(self, test_name, verbosity, tearDownError=None): 6287db96d56Sopenharmony_ci stream = BufferedWriter() 6297db96d56Sopenharmony_ci stream = unittest.runner._WritelnDecorator(stream) 6307db96d56Sopenharmony_ci result = unittest.TextTestResult(stream, True, verbosity) 6317db96d56Sopenharmony_ci test = self.Test(test_name) 6327db96d56Sopenharmony_ci test.tearDownError = tearDownError 6337db96d56Sopenharmony_ci test.run(result) 6347db96d56Sopenharmony_ci return stream.getvalue() 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ci def testDotsOutput(self): 6377db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSuccess', 1), '.') 6387db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSkip', 1), 's') 6397db96d56Sopenharmony_ci self.assertEqual(self._run_test('testFail', 1), 'F') 6407db96d56Sopenharmony_ci self.assertEqual(self._run_test('testError', 1), 'E') 6417db96d56Sopenharmony_ci self.assertEqual(self._run_test('testExpectedFailure', 1), 'x') 6427db96d56Sopenharmony_ci self.assertEqual(self._run_test('testUnexpectedSuccess', 1), 'u') 6437db96d56Sopenharmony_ci 6447db96d56Sopenharmony_ci def testLongOutput(self): 6457db96d56Sopenharmony_ci classname = f'{__name__}.{self.Test.__qualname__}' 6467db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSuccess', 2), 6477db96d56Sopenharmony_ci f'testSuccess ({classname}.testSuccess) ... ok\n') 6487db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSkip', 2), 6497db96d56Sopenharmony_ci f"testSkip ({classname}.testSkip) ... skipped 'skip'\n") 6507db96d56Sopenharmony_ci self.assertEqual(self._run_test('testFail', 2), 6517db96d56Sopenharmony_ci f'testFail ({classname}.testFail) ... FAIL\n') 6527db96d56Sopenharmony_ci self.assertEqual(self._run_test('testError', 2), 6537db96d56Sopenharmony_ci f'testError ({classname}.testError) ... ERROR\n') 6547db96d56Sopenharmony_ci self.assertEqual(self._run_test('testExpectedFailure', 2), 6557db96d56Sopenharmony_ci f'testExpectedFailure ({classname}.testExpectedFailure) ... expected failure\n') 6567db96d56Sopenharmony_ci self.assertEqual(self._run_test('testUnexpectedSuccess', 2), 6577db96d56Sopenharmony_ci f'testUnexpectedSuccess ({classname}.testUnexpectedSuccess) ... unexpected success\n') 6587db96d56Sopenharmony_ci 6597db96d56Sopenharmony_ci def testDotsOutputSubTestSuccess(self): 6607db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSubTestSuccess', 1), '.') 6617db96d56Sopenharmony_ci 6627db96d56Sopenharmony_ci def testLongOutputSubTestSuccess(self): 6637db96d56Sopenharmony_ci classname = f'{__name__}.{self.Test.__qualname__}' 6647db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSubTestSuccess', 2), 6657db96d56Sopenharmony_ci f'testSubTestSuccess ({classname}.testSubTestSuccess) ... ok\n') 6667db96d56Sopenharmony_ci 6677db96d56Sopenharmony_ci def testDotsOutputSubTestMixed(self): 6687db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSubTestMixed', 1), 'sFE') 6697db96d56Sopenharmony_ci 6707db96d56Sopenharmony_ci def testLongOutputSubTestMixed(self): 6717db96d56Sopenharmony_ci classname = f'{__name__}.{self.Test.__qualname__}' 6727db96d56Sopenharmony_ci self.assertEqual(self._run_test('testSubTestMixed', 2), 6737db96d56Sopenharmony_ci f'testSubTestMixed ({classname}.testSubTestMixed) ... \n' 6747db96d56Sopenharmony_ci f" testSubTestMixed ({classname}.testSubTestMixed) [skip] (b=2) ... skipped 'skip'\n" 6757db96d56Sopenharmony_ci f' testSubTestMixed ({classname}.testSubTestMixed) [fail] (c=3) ... FAIL\n' 6767db96d56Sopenharmony_ci f' testSubTestMixed ({classname}.testSubTestMixed) [error] (d=4) ... ERROR\n') 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci def testDotsOutputTearDownFail(self): 6797db96d56Sopenharmony_ci out = self._run_test('testSuccess', 1, AssertionError('fail')) 6807db96d56Sopenharmony_ci self.assertEqual(out, 'F') 6817db96d56Sopenharmony_ci out = self._run_test('testError', 1, AssertionError('fail')) 6827db96d56Sopenharmony_ci self.assertEqual(out, 'EF') 6837db96d56Sopenharmony_ci out = self._run_test('testFail', 1, Exception('error')) 6847db96d56Sopenharmony_ci self.assertEqual(out, 'FE') 6857db96d56Sopenharmony_ci out = self._run_test('testSkip', 1, AssertionError('fail')) 6867db96d56Sopenharmony_ci self.assertEqual(out, 'sF') 6877db96d56Sopenharmony_ci 6887db96d56Sopenharmony_ci def testLongOutputTearDownFail(self): 6897db96d56Sopenharmony_ci classname = f'{__name__}.{self.Test.__qualname__}' 6907db96d56Sopenharmony_ci out = self._run_test('testSuccess', 2, AssertionError('fail')) 6917db96d56Sopenharmony_ci self.assertEqual(out, 6927db96d56Sopenharmony_ci f'testSuccess ({classname}.testSuccess) ... FAIL\n') 6937db96d56Sopenharmony_ci out = self._run_test('testError', 2, AssertionError('fail')) 6947db96d56Sopenharmony_ci self.assertEqual(out, 6957db96d56Sopenharmony_ci f'testError ({classname}.testError) ... ERROR\n' 6967db96d56Sopenharmony_ci f'testError ({classname}.testError) ... FAIL\n') 6977db96d56Sopenharmony_ci out = self._run_test('testFail', 2, Exception('error')) 6987db96d56Sopenharmony_ci self.assertEqual(out, 6997db96d56Sopenharmony_ci f'testFail ({classname}.testFail) ... FAIL\n' 7007db96d56Sopenharmony_ci f'testFail ({classname}.testFail) ... ERROR\n') 7017db96d56Sopenharmony_ci out = self._run_test('testSkip', 2, AssertionError('fail')) 7027db96d56Sopenharmony_ci self.assertEqual(out, 7037db96d56Sopenharmony_ci f"testSkip ({classname}.testSkip) ... skipped 'skip'\n" 7047db96d56Sopenharmony_ci f'testSkip ({classname}.testSkip) ... FAIL\n') 7057db96d56Sopenharmony_ci 7067db96d56Sopenharmony_ci 7077db96d56Sopenharmony_ciclassDict = dict(unittest.TestResult.__dict__) 7087db96d56Sopenharmony_cifor m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess', 7097db96d56Sopenharmony_ci '__init__'): 7107db96d56Sopenharmony_ci del classDict[m] 7117db96d56Sopenharmony_ci 7127db96d56Sopenharmony_cidef __init__(self, stream=None, descriptions=None, verbosity=None): 7137db96d56Sopenharmony_ci self.failures = [] 7147db96d56Sopenharmony_ci self.errors = [] 7157db96d56Sopenharmony_ci self.testsRun = 0 7167db96d56Sopenharmony_ci self.shouldStop = False 7177db96d56Sopenharmony_ci self.buffer = False 7187db96d56Sopenharmony_ci self.tb_locals = False 7197db96d56Sopenharmony_ci 7207db96d56Sopenharmony_ciclassDict['__init__'] = __init__ 7217db96d56Sopenharmony_ciOldResult = type('OldResult', (object,), classDict) 7227db96d56Sopenharmony_ci 7237db96d56Sopenharmony_ciclass Test_OldTestResult(unittest.TestCase): 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci def assertOldResultWarning(self, test, failures): 7267db96d56Sopenharmony_ci with warnings_helper.check_warnings( 7277db96d56Sopenharmony_ci ("TestResult has no add.+ method,", RuntimeWarning)): 7287db96d56Sopenharmony_ci result = OldResult() 7297db96d56Sopenharmony_ci test.run(result) 7307db96d56Sopenharmony_ci self.assertEqual(len(result.failures), failures) 7317db96d56Sopenharmony_ci 7327db96d56Sopenharmony_ci def testOldTestResult(self): 7337db96d56Sopenharmony_ci class Test(unittest.TestCase): 7347db96d56Sopenharmony_ci def testSkip(self): 7357db96d56Sopenharmony_ci self.skipTest('foobar') 7367db96d56Sopenharmony_ci @unittest.expectedFailure 7377db96d56Sopenharmony_ci def testExpectedFail(self): 7387db96d56Sopenharmony_ci raise TypeError 7397db96d56Sopenharmony_ci @unittest.expectedFailure 7407db96d56Sopenharmony_ci def testUnexpectedSuccess(self): 7417db96d56Sopenharmony_ci pass 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ci for test_name, should_pass in (('testSkip', True), 7447db96d56Sopenharmony_ci ('testExpectedFail', True), 7457db96d56Sopenharmony_ci ('testUnexpectedSuccess', False)): 7467db96d56Sopenharmony_ci test = Test(test_name) 7477db96d56Sopenharmony_ci self.assertOldResultWarning(test, int(not should_pass)) 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ci def testOldTestTesultSetup(self): 7507db96d56Sopenharmony_ci class Test(unittest.TestCase): 7517db96d56Sopenharmony_ci def setUp(self): 7527db96d56Sopenharmony_ci self.skipTest('no reason') 7537db96d56Sopenharmony_ci def testFoo(self): 7547db96d56Sopenharmony_ci pass 7557db96d56Sopenharmony_ci self.assertOldResultWarning(Test('testFoo'), 0) 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci def testOldTestResultClass(self): 7587db96d56Sopenharmony_ci @unittest.skip('no reason') 7597db96d56Sopenharmony_ci class Test(unittest.TestCase): 7607db96d56Sopenharmony_ci def testFoo(self): 7617db96d56Sopenharmony_ci pass 7627db96d56Sopenharmony_ci self.assertOldResultWarning(Test('testFoo'), 0) 7637db96d56Sopenharmony_ci 7647db96d56Sopenharmony_ci def testOldResultWithRunner(self): 7657db96d56Sopenharmony_ci class Test(unittest.TestCase): 7667db96d56Sopenharmony_ci def testFoo(self): 7677db96d56Sopenharmony_ci pass 7687db96d56Sopenharmony_ci runner = unittest.TextTestRunner(resultclass=OldResult, 7697db96d56Sopenharmony_ci stream=io.StringIO()) 7707db96d56Sopenharmony_ci # This will raise an exception if TextTestRunner can't handle old 7717db96d56Sopenharmony_ci # test result objects 7727db96d56Sopenharmony_ci runner.run(Test('testFoo')) 7737db96d56Sopenharmony_ci 7747db96d56Sopenharmony_ci 7757db96d56Sopenharmony_ciclass TestOutputBuffering(unittest.TestCase): 7767db96d56Sopenharmony_ci 7777db96d56Sopenharmony_ci def setUp(self): 7787db96d56Sopenharmony_ci self._real_out = sys.stdout 7797db96d56Sopenharmony_ci self._real_err = sys.stderr 7807db96d56Sopenharmony_ci 7817db96d56Sopenharmony_ci def tearDown(self): 7827db96d56Sopenharmony_ci sys.stdout = self._real_out 7837db96d56Sopenharmony_ci sys.stderr = self._real_err 7847db96d56Sopenharmony_ci 7857db96d56Sopenharmony_ci def testBufferOutputOff(self): 7867db96d56Sopenharmony_ci real_out = self._real_out 7877db96d56Sopenharmony_ci real_err = self._real_err 7887db96d56Sopenharmony_ci 7897db96d56Sopenharmony_ci result = unittest.TestResult() 7907db96d56Sopenharmony_ci self.assertFalse(result.buffer) 7917db96d56Sopenharmony_ci 7927db96d56Sopenharmony_ci self.assertIs(real_out, sys.stdout) 7937db96d56Sopenharmony_ci self.assertIs(real_err, sys.stderr) 7947db96d56Sopenharmony_ci 7957db96d56Sopenharmony_ci result.startTest(self) 7967db96d56Sopenharmony_ci 7977db96d56Sopenharmony_ci self.assertIs(real_out, sys.stdout) 7987db96d56Sopenharmony_ci self.assertIs(real_err, sys.stderr) 7997db96d56Sopenharmony_ci 8007db96d56Sopenharmony_ci def testBufferOutputStartTestAddSuccess(self): 8017db96d56Sopenharmony_ci real_out = self._real_out 8027db96d56Sopenharmony_ci real_err = self._real_err 8037db96d56Sopenharmony_ci 8047db96d56Sopenharmony_ci result = unittest.TestResult() 8057db96d56Sopenharmony_ci self.assertFalse(result.buffer) 8067db96d56Sopenharmony_ci 8077db96d56Sopenharmony_ci result.buffer = True 8087db96d56Sopenharmony_ci 8097db96d56Sopenharmony_ci self.assertIs(real_out, sys.stdout) 8107db96d56Sopenharmony_ci self.assertIs(real_err, sys.stderr) 8117db96d56Sopenharmony_ci 8127db96d56Sopenharmony_ci result.startTest(self) 8137db96d56Sopenharmony_ci 8147db96d56Sopenharmony_ci self.assertIsNot(real_out, sys.stdout) 8157db96d56Sopenharmony_ci self.assertIsNot(real_err, sys.stderr) 8167db96d56Sopenharmony_ci self.assertIsInstance(sys.stdout, io.StringIO) 8177db96d56Sopenharmony_ci self.assertIsInstance(sys.stderr, io.StringIO) 8187db96d56Sopenharmony_ci self.assertIsNot(sys.stdout, sys.stderr) 8197db96d56Sopenharmony_ci 8207db96d56Sopenharmony_ci out_stream = sys.stdout 8217db96d56Sopenharmony_ci err_stream = sys.stderr 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_ci result._original_stdout = io.StringIO() 8247db96d56Sopenharmony_ci result._original_stderr = io.StringIO() 8257db96d56Sopenharmony_ci 8267db96d56Sopenharmony_ci print('foo') 8277db96d56Sopenharmony_ci print('bar', file=sys.stderr) 8287db96d56Sopenharmony_ci 8297db96d56Sopenharmony_ci self.assertEqual(out_stream.getvalue(), 'foo\n') 8307db96d56Sopenharmony_ci self.assertEqual(err_stream.getvalue(), 'bar\n') 8317db96d56Sopenharmony_ci 8327db96d56Sopenharmony_ci self.assertEqual(result._original_stdout.getvalue(), '') 8337db96d56Sopenharmony_ci self.assertEqual(result._original_stderr.getvalue(), '') 8347db96d56Sopenharmony_ci 8357db96d56Sopenharmony_ci result.addSuccess(self) 8367db96d56Sopenharmony_ci result.stopTest(self) 8377db96d56Sopenharmony_ci 8387db96d56Sopenharmony_ci self.assertIs(sys.stdout, result._original_stdout) 8397db96d56Sopenharmony_ci self.assertIs(sys.stderr, result._original_stderr) 8407db96d56Sopenharmony_ci 8417db96d56Sopenharmony_ci self.assertEqual(result._original_stdout.getvalue(), '') 8427db96d56Sopenharmony_ci self.assertEqual(result._original_stderr.getvalue(), '') 8437db96d56Sopenharmony_ci 8447db96d56Sopenharmony_ci self.assertEqual(out_stream.getvalue(), '') 8457db96d56Sopenharmony_ci self.assertEqual(err_stream.getvalue(), '') 8467db96d56Sopenharmony_ci 8477db96d56Sopenharmony_ci 8487db96d56Sopenharmony_ci def getStartedResult(self): 8497db96d56Sopenharmony_ci result = unittest.TestResult() 8507db96d56Sopenharmony_ci result.buffer = True 8517db96d56Sopenharmony_ci result.startTest(self) 8527db96d56Sopenharmony_ci return result 8537db96d56Sopenharmony_ci 8547db96d56Sopenharmony_ci def testBufferOutputAddErrorOrFailure(self): 8557db96d56Sopenharmony_ci unittest.result.traceback = MockTraceback 8567db96d56Sopenharmony_ci self.addCleanup(restore_traceback) 8577db96d56Sopenharmony_ci 8587db96d56Sopenharmony_ci for message_attr, add_attr, include_error in [ 8597db96d56Sopenharmony_ci ('errors', 'addError', True), 8607db96d56Sopenharmony_ci ('failures', 'addFailure', False), 8617db96d56Sopenharmony_ci ('errors', 'addError', True), 8627db96d56Sopenharmony_ci ('failures', 'addFailure', False) 8637db96d56Sopenharmony_ci ]: 8647db96d56Sopenharmony_ci result = self.getStartedResult() 8657db96d56Sopenharmony_ci buffered_out = sys.stdout 8667db96d56Sopenharmony_ci buffered_err = sys.stderr 8677db96d56Sopenharmony_ci result._original_stdout = io.StringIO() 8687db96d56Sopenharmony_ci result._original_stderr = io.StringIO() 8697db96d56Sopenharmony_ci 8707db96d56Sopenharmony_ci print('foo', file=sys.stdout) 8717db96d56Sopenharmony_ci if include_error: 8727db96d56Sopenharmony_ci print('bar', file=sys.stderr) 8737db96d56Sopenharmony_ci 8747db96d56Sopenharmony_ci 8757db96d56Sopenharmony_ci addFunction = getattr(result, add_attr) 8767db96d56Sopenharmony_ci addFunction(self, (None, None, None)) 8777db96d56Sopenharmony_ci result.stopTest(self) 8787db96d56Sopenharmony_ci 8797db96d56Sopenharmony_ci result_list = getattr(result, message_attr) 8807db96d56Sopenharmony_ci self.assertEqual(len(result_list), 1) 8817db96d56Sopenharmony_ci 8827db96d56Sopenharmony_ci test, message = result_list[0] 8837db96d56Sopenharmony_ci expectedOutMessage = textwrap.dedent(""" 8847db96d56Sopenharmony_ci Stdout: 8857db96d56Sopenharmony_ci foo 8867db96d56Sopenharmony_ci """) 8877db96d56Sopenharmony_ci expectedErrMessage = '' 8887db96d56Sopenharmony_ci if include_error: 8897db96d56Sopenharmony_ci expectedErrMessage = textwrap.dedent(""" 8907db96d56Sopenharmony_ci Stderr: 8917db96d56Sopenharmony_ci bar 8927db96d56Sopenharmony_ci """) 8937db96d56Sopenharmony_ci 8947db96d56Sopenharmony_ci expectedFullMessage = 'A traceback%s%s' % (expectedOutMessage, expectedErrMessage) 8957db96d56Sopenharmony_ci 8967db96d56Sopenharmony_ci self.assertIs(test, self) 8977db96d56Sopenharmony_ci self.assertEqual(result._original_stdout.getvalue(), expectedOutMessage) 8987db96d56Sopenharmony_ci self.assertEqual(result._original_stderr.getvalue(), expectedErrMessage) 8997db96d56Sopenharmony_ci self.assertMultiLineEqual(message, expectedFullMessage) 9007db96d56Sopenharmony_ci 9017db96d56Sopenharmony_ci def testBufferSetUp(self): 9027db96d56Sopenharmony_ci with captured_stdout() as stdout: 9037db96d56Sopenharmony_ci result = unittest.TestResult() 9047db96d56Sopenharmony_ci result.buffer = True 9057db96d56Sopenharmony_ci 9067db96d56Sopenharmony_ci class Foo(unittest.TestCase): 9077db96d56Sopenharmony_ci def setUp(self): 9087db96d56Sopenharmony_ci print('set up') 9097db96d56Sopenharmony_ci 1/0 9107db96d56Sopenharmony_ci def test_foo(self): 9117db96d56Sopenharmony_ci pass 9127db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 9137db96d56Sopenharmony_ci suite(result) 9147db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up\n' 9157db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 9167db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 9177db96d56Sopenharmony_ci description = f'test_foo ({strclass(Foo)}.test_foo)' 9187db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 9197db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 9207db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 9217db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 9227db96d56Sopenharmony_ci 9237db96d56Sopenharmony_ci def testBufferTearDown(self): 9247db96d56Sopenharmony_ci with captured_stdout() as stdout: 9257db96d56Sopenharmony_ci result = unittest.TestResult() 9267db96d56Sopenharmony_ci result.buffer = True 9277db96d56Sopenharmony_ci 9287db96d56Sopenharmony_ci class Foo(unittest.TestCase): 9297db96d56Sopenharmony_ci def tearDown(self): 9307db96d56Sopenharmony_ci print('tear down') 9317db96d56Sopenharmony_ci 1/0 9327db96d56Sopenharmony_ci def test_foo(self): 9337db96d56Sopenharmony_ci pass 9347db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 9357db96d56Sopenharmony_ci suite(result) 9367db96d56Sopenharmony_ci expected_out = '\nStdout:\ntear down\n' 9377db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 9387db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 9397db96d56Sopenharmony_ci description = f'test_foo ({strclass(Foo)}.test_foo)' 9407db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 9417db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 9427db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 9437db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 9447db96d56Sopenharmony_ci 9457db96d56Sopenharmony_ci def testBufferDoCleanups(self): 9467db96d56Sopenharmony_ci with captured_stdout() as stdout: 9477db96d56Sopenharmony_ci result = unittest.TestResult() 9487db96d56Sopenharmony_ci result.buffer = True 9497db96d56Sopenharmony_ci 9507db96d56Sopenharmony_ci class Foo(unittest.TestCase): 9517db96d56Sopenharmony_ci def setUp(self): 9527db96d56Sopenharmony_ci print('set up') 9537db96d56Sopenharmony_ci self.addCleanup(bad_cleanup1) 9547db96d56Sopenharmony_ci self.addCleanup(bad_cleanup2) 9557db96d56Sopenharmony_ci def test_foo(self): 9567db96d56Sopenharmony_ci pass 9577db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 9587db96d56Sopenharmony_ci suite(result) 9597db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up\ndo cleanup2\ndo cleanup1\n' 9607db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 9617db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 2) 9627db96d56Sopenharmony_ci description = f'test_foo ({strclass(Foo)}.test_foo)' 9637db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 9647db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 9657db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 9667db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 9677db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up\ndo cleanup2\n', formatted_exc) 9687db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup1\n', formatted_exc) 9697db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 9707db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 9717db96d56Sopenharmony_ci self.assertIn('TypeError: bad cleanup1', formatted_exc) 9727db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 9737db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 9747db96d56Sopenharmony_ci 9757db96d56Sopenharmony_ci def testBufferSetUp_DoCleanups(self): 9767db96d56Sopenharmony_ci with captured_stdout() as stdout: 9777db96d56Sopenharmony_ci result = unittest.TestResult() 9787db96d56Sopenharmony_ci result.buffer = True 9797db96d56Sopenharmony_ci 9807db96d56Sopenharmony_ci class Foo(unittest.TestCase): 9817db96d56Sopenharmony_ci def setUp(self): 9827db96d56Sopenharmony_ci print('set up') 9837db96d56Sopenharmony_ci self.addCleanup(bad_cleanup1) 9847db96d56Sopenharmony_ci self.addCleanup(bad_cleanup2) 9857db96d56Sopenharmony_ci 1/0 9867db96d56Sopenharmony_ci def test_foo(self): 9877db96d56Sopenharmony_ci pass 9887db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 9897db96d56Sopenharmony_ci suite(result) 9907db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up\ndo cleanup2\ndo cleanup1\n' 9917db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 9927db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 3) 9937db96d56Sopenharmony_ci description = f'test_foo ({strclass(Foo)}.test_foo)' 9947db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 9957db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 9967db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 9977db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 9987db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 9997db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up\n', formatted_exc) 10007db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup2\n', formatted_exc) 10017db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup1\n', formatted_exc) 10027db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 10037db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 10047db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 10057db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 10067db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 10077db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up\ndo cleanup2\n', formatted_exc) 10087db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup1\n', formatted_exc) 10097db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[2] 10107db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 10117db96d56Sopenharmony_ci self.assertIn('TypeError: bad cleanup1', formatted_exc) 10127db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 10137db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 10147db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 10157db96d56Sopenharmony_ci 10167db96d56Sopenharmony_ci def testBufferTearDown_DoCleanups(self): 10177db96d56Sopenharmony_ci with captured_stdout() as stdout: 10187db96d56Sopenharmony_ci result = unittest.TestResult() 10197db96d56Sopenharmony_ci result.buffer = True 10207db96d56Sopenharmony_ci 10217db96d56Sopenharmony_ci class Foo(unittest.TestCase): 10227db96d56Sopenharmony_ci def setUp(self): 10237db96d56Sopenharmony_ci print('set up') 10247db96d56Sopenharmony_ci self.addCleanup(bad_cleanup1) 10257db96d56Sopenharmony_ci self.addCleanup(bad_cleanup2) 10267db96d56Sopenharmony_ci def tearDown(self): 10277db96d56Sopenharmony_ci print('tear down') 10287db96d56Sopenharmony_ci 1/0 10297db96d56Sopenharmony_ci def test_foo(self): 10307db96d56Sopenharmony_ci pass 10317db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 10327db96d56Sopenharmony_ci suite(result) 10337db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up\ntear down\ndo cleanup2\ndo cleanup1\n' 10347db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 10357db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 3) 10367db96d56Sopenharmony_ci description = f'test_foo ({strclass(Foo)}.test_foo)' 10377db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 10387db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 10397db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 10407db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 10417db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 10427db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up\ntear down\n', formatted_exc) 10437db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup2\n', formatted_exc) 10447db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup1\n', formatted_exc) 10457db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 10467db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 10477db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 10487db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 10497db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 10507db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up\ntear down\ndo cleanup2\n', formatted_exc) 10517db96d56Sopenharmony_ci self.assertNotIn('\ndo cleanup1\n', formatted_exc) 10527db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[2] 10537db96d56Sopenharmony_ci self.assertEqual(str(test_case), description) 10547db96d56Sopenharmony_ci self.assertIn('TypeError: bad cleanup1', formatted_exc) 10557db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 10567db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 10577db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 10587db96d56Sopenharmony_ci 10597db96d56Sopenharmony_ci def testBufferSetupClass(self): 10607db96d56Sopenharmony_ci with captured_stdout() as stdout: 10617db96d56Sopenharmony_ci result = unittest.TestResult() 10627db96d56Sopenharmony_ci result.buffer = True 10637db96d56Sopenharmony_ci 10647db96d56Sopenharmony_ci class Foo(unittest.TestCase): 10657db96d56Sopenharmony_ci @classmethod 10667db96d56Sopenharmony_ci def setUpClass(cls): 10677db96d56Sopenharmony_ci print('set up class') 10687db96d56Sopenharmony_ci 1/0 10697db96d56Sopenharmony_ci def test_foo(self): 10707db96d56Sopenharmony_ci pass 10717db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 10727db96d56Sopenharmony_ci suite(result) 10737db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up class\n' 10747db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 10757db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 10767db96d56Sopenharmony_ci description = f'setUpClass ({strclass(Foo)})' 10777db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 10787db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 10797db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 10807db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 10817db96d56Sopenharmony_ci 10827db96d56Sopenharmony_ci def testBufferTearDownClass(self): 10837db96d56Sopenharmony_ci with captured_stdout() as stdout: 10847db96d56Sopenharmony_ci result = unittest.TestResult() 10857db96d56Sopenharmony_ci result.buffer = True 10867db96d56Sopenharmony_ci 10877db96d56Sopenharmony_ci class Foo(unittest.TestCase): 10887db96d56Sopenharmony_ci @classmethod 10897db96d56Sopenharmony_ci def tearDownClass(cls): 10907db96d56Sopenharmony_ci print('tear down class') 10917db96d56Sopenharmony_ci 1/0 10927db96d56Sopenharmony_ci def test_foo(self): 10937db96d56Sopenharmony_ci pass 10947db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 10957db96d56Sopenharmony_ci suite(result) 10967db96d56Sopenharmony_ci expected_out = '\nStdout:\ntear down class\n' 10977db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 10987db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 10997db96d56Sopenharmony_ci description = f'tearDownClass ({strclass(Foo)})' 11007db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 11017db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 11027db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 11037db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 11047db96d56Sopenharmony_ci 11057db96d56Sopenharmony_ci def testBufferDoClassCleanups(self): 11067db96d56Sopenharmony_ci with captured_stdout() as stdout: 11077db96d56Sopenharmony_ci result = unittest.TestResult() 11087db96d56Sopenharmony_ci result.buffer = True 11097db96d56Sopenharmony_ci 11107db96d56Sopenharmony_ci class Foo(unittest.TestCase): 11117db96d56Sopenharmony_ci @classmethod 11127db96d56Sopenharmony_ci def setUpClass(cls): 11137db96d56Sopenharmony_ci print('set up class') 11147db96d56Sopenharmony_ci cls.addClassCleanup(bad_cleanup1) 11157db96d56Sopenharmony_ci cls.addClassCleanup(bad_cleanup2) 11167db96d56Sopenharmony_ci @classmethod 11177db96d56Sopenharmony_ci def tearDownClass(cls): 11187db96d56Sopenharmony_ci print('tear down class') 11197db96d56Sopenharmony_ci def test_foo(self): 11207db96d56Sopenharmony_ci pass 11217db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 11227db96d56Sopenharmony_ci suite(result) 11237db96d56Sopenharmony_ci expected_out = '\nStdout:\ntear down class\ndo cleanup2\ndo cleanup1\n' 11247db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 11257db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 2) 11267db96d56Sopenharmony_ci description = f'tearDownClass ({strclass(Foo)})' 11277db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 11287db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 11297db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 11307db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 11317db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 11327db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 11337db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 11347db96d56Sopenharmony_ci self.assertIn('TypeError: bad cleanup1', formatted_exc) 11357db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 11367db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 11377db96d56Sopenharmony_ci 11387db96d56Sopenharmony_ci def testBufferSetupClass_DoClassCleanups(self): 11397db96d56Sopenharmony_ci with captured_stdout() as stdout: 11407db96d56Sopenharmony_ci result = unittest.TestResult() 11417db96d56Sopenharmony_ci result.buffer = True 11427db96d56Sopenharmony_ci 11437db96d56Sopenharmony_ci class Foo(unittest.TestCase): 11447db96d56Sopenharmony_ci @classmethod 11457db96d56Sopenharmony_ci def setUpClass(cls): 11467db96d56Sopenharmony_ci print('set up class') 11477db96d56Sopenharmony_ci cls.addClassCleanup(bad_cleanup1) 11487db96d56Sopenharmony_ci cls.addClassCleanup(bad_cleanup2) 11497db96d56Sopenharmony_ci 1/0 11507db96d56Sopenharmony_ci def test_foo(self): 11517db96d56Sopenharmony_ci pass 11527db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 11537db96d56Sopenharmony_ci suite(result) 11547db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up class\ndo cleanup2\ndo cleanup1\n' 11557db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 11567db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 3) 11577db96d56Sopenharmony_ci description = f'setUpClass ({strclass(Foo)})' 11587db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 11597db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 11607db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 11617db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 11627db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 11637db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up class\n', formatted_exc) 11647db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 11657db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 11667db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 11677db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 11687db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 11697db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 11707db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[2] 11717db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 11727db96d56Sopenharmony_ci self.assertIn('TypeError: bad cleanup1', formatted_exc) 11737db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 11747db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 11757db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 11767db96d56Sopenharmony_ci 11777db96d56Sopenharmony_ci def testBufferTearDownClass_DoClassCleanups(self): 11787db96d56Sopenharmony_ci with captured_stdout() as stdout: 11797db96d56Sopenharmony_ci result = unittest.TestResult() 11807db96d56Sopenharmony_ci result.buffer = True 11817db96d56Sopenharmony_ci 11827db96d56Sopenharmony_ci class Foo(unittest.TestCase): 11837db96d56Sopenharmony_ci @classmethod 11847db96d56Sopenharmony_ci def setUpClass(cls): 11857db96d56Sopenharmony_ci print('set up class') 11867db96d56Sopenharmony_ci cls.addClassCleanup(bad_cleanup1) 11877db96d56Sopenharmony_ci cls.addClassCleanup(bad_cleanup2) 11887db96d56Sopenharmony_ci @classmethod 11897db96d56Sopenharmony_ci def tearDownClass(cls): 11907db96d56Sopenharmony_ci print('tear down class') 11917db96d56Sopenharmony_ci 1/0 11927db96d56Sopenharmony_ci def test_foo(self): 11937db96d56Sopenharmony_ci pass 11947db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 11957db96d56Sopenharmony_ci suite(result) 11967db96d56Sopenharmony_ci expected_out = '\nStdout:\ntear down class\ndo cleanup2\ndo cleanup1\n' 11977db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 11987db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 3) 11997db96d56Sopenharmony_ci description = f'tearDownClass ({strclass(Foo)})' 12007db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 12017db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 12027db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 12037db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 12047db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 12057db96d56Sopenharmony_ci self.assertIn('\nStdout:\ntear down class\n', formatted_exc) 12067db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 12077db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 12087db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 12097db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 12107db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 12117db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 12127db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[2] 12137db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 12147db96d56Sopenharmony_ci self.assertIn('TypeError: bad cleanup1', formatted_exc) 12157db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 12167db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 12177db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 12187db96d56Sopenharmony_ci 12197db96d56Sopenharmony_ci def testBufferSetUpModule(self): 12207db96d56Sopenharmony_ci with captured_stdout() as stdout: 12217db96d56Sopenharmony_ci result = unittest.TestResult() 12227db96d56Sopenharmony_ci result.buffer = True 12237db96d56Sopenharmony_ci 12247db96d56Sopenharmony_ci class Foo(unittest.TestCase): 12257db96d56Sopenharmony_ci def test_foo(self): 12267db96d56Sopenharmony_ci pass 12277db96d56Sopenharmony_ci class Module(object): 12287db96d56Sopenharmony_ci @staticmethod 12297db96d56Sopenharmony_ci def setUpModule(): 12307db96d56Sopenharmony_ci print('set up module') 12317db96d56Sopenharmony_ci 1/0 12327db96d56Sopenharmony_ci 12337db96d56Sopenharmony_ci Foo.__module__ = 'Module' 12347db96d56Sopenharmony_ci sys.modules['Module'] = Module 12357db96d56Sopenharmony_ci self.addCleanup(sys.modules.pop, 'Module') 12367db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 12377db96d56Sopenharmony_ci suite(result) 12387db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up module\n' 12397db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 12407db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 12417db96d56Sopenharmony_ci description = 'setUpModule (Module)' 12427db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 12437db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 12447db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 12457db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 12467db96d56Sopenharmony_ci 12477db96d56Sopenharmony_ci def testBufferTearDownModule(self): 12487db96d56Sopenharmony_ci with captured_stdout() as stdout: 12497db96d56Sopenharmony_ci result = unittest.TestResult() 12507db96d56Sopenharmony_ci result.buffer = True 12517db96d56Sopenharmony_ci 12527db96d56Sopenharmony_ci class Foo(unittest.TestCase): 12537db96d56Sopenharmony_ci def test_foo(self): 12547db96d56Sopenharmony_ci pass 12557db96d56Sopenharmony_ci class Module(object): 12567db96d56Sopenharmony_ci @staticmethod 12577db96d56Sopenharmony_ci def tearDownModule(): 12587db96d56Sopenharmony_ci print('tear down module') 12597db96d56Sopenharmony_ci 1/0 12607db96d56Sopenharmony_ci 12617db96d56Sopenharmony_ci Foo.__module__ = 'Module' 12627db96d56Sopenharmony_ci sys.modules['Module'] = Module 12637db96d56Sopenharmony_ci self.addCleanup(sys.modules.pop, 'Module') 12647db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 12657db96d56Sopenharmony_ci suite(result) 12667db96d56Sopenharmony_ci expected_out = '\nStdout:\ntear down module\n' 12677db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 12687db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 12697db96d56Sopenharmony_ci description = 'tearDownModule (Module)' 12707db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 12717db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 12727db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 12737db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 12747db96d56Sopenharmony_ci 12757db96d56Sopenharmony_ci def testBufferDoModuleCleanups(self): 12767db96d56Sopenharmony_ci with captured_stdout() as stdout: 12777db96d56Sopenharmony_ci result = unittest.TestResult() 12787db96d56Sopenharmony_ci result.buffer = True 12797db96d56Sopenharmony_ci 12807db96d56Sopenharmony_ci class Foo(unittest.TestCase): 12817db96d56Sopenharmony_ci def test_foo(self): 12827db96d56Sopenharmony_ci pass 12837db96d56Sopenharmony_ci class Module(object): 12847db96d56Sopenharmony_ci @staticmethod 12857db96d56Sopenharmony_ci def setUpModule(): 12867db96d56Sopenharmony_ci print('set up module') 12877db96d56Sopenharmony_ci unittest.addModuleCleanup(bad_cleanup1) 12887db96d56Sopenharmony_ci unittest.addModuleCleanup(bad_cleanup2) 12897db96d56Sopenharmony_ci 12907db96d56Sopenharmony_ci Foo.__module__ = 'Module' 12917db96d56Sopenharmony_ci sys.modules['Module'] = Module 12927db96d56Sopenharmony_ci self.addCleanup(sys.modules.pop, 'Module') 12937db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 12947db96d56Sopenharmony_ci suite(result) 12957db96d56Sopenharmony_ci expected_out = '\nStdout:\ndo cleanup2\ndo cleanup1\n' 12967db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 12977db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 1) 12987db96d56Sopenharmony_ci description = 'tearDownModule (Module)' 12997db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 13007db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 13017db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 13027db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 13037db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 13047db96d56Sopenharmony_ci 13057db96d56Sopenharmony_ci def testBufferSetUpModule_DoModuleCleanups(self): 13067db96d56Sopenharmony_ci with captured_stdout() as stdout: 13077db96d56Sopenharmony_ci result = unittest.TestResult() 13087db96d56Sopenharmony_ci result.buffer = True 13097db96d56Sopenharmony_ci 13107db96d56Sopenharmony_ci class Foo(unittest.TestCase): 13117db96d56Sopenharmony_ci def test_foo(self): 13127db96d56Sopenharmony_ci pass 13137db96d56Sopenharmony_ci class Module(object): 13147db96d56Sopenharmony_ci @staticmethod 13157db96d56Sopenharmony_ci def setUpModule(): 13167db96d56Sopenharmony_ci print('set up module') 13177db96d56Sopenharmony_ci unittest.addModuleCleanup(bad_cleanup1) 13187db96d56Sopenharmony_ci unittest.addModuleCleanup(bad_cleanup2) 13197db96d56Sopenharmony_ci 1/0 13207db96d56Sopenharmony_ci 13217db96d56Sopenharmony_ci Foo.__module__ = 'Module' 13227db96d56Sopenharmony_ci sys.modules['Module'] = Module 13237db96d56Sopenharmony_ci self.addCleanup(sys.modules.pop, 'Module') 13247db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 13257db96d56Sopenharmony_ci suite(result) 13267db96d56Sopenharmony_ci expected_out = '\nStdout:\nset up module\ndo cleanup2\ndo cleanup1\n' 13277db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 13287db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 2) 13297db96d56Sopenharmony_ci description = 'setUpModule (Module)' 13307db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 13317db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 13327db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 13337db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 13347db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 13357db96d56Sopenharmony_ci self.assertIn('\nStdout:\nset up module\n', formatted_exc) 13367db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 13377db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 13387db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 13397db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 13407db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 13417db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 13427db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 13437db96d56Sopenharmony_ci 13447db96d56Sopenharmony_ci def testBufferTearDownModule_DoModuleCleanups(self): 13457db96d56Sopenharmony_ci with captured_stdout() as stdout: 13467db96d56Sopenharmony_ci result = unittest.TestResult() 13477db96d56Sopenharmony_ci result.buffer = True 13487db96d56Sopenharmony_ci 13497db96d56Sopenharmony_ci class Foo(unittest.TestCase): 13507db96d56Sopenharmony_ci def test_foo(self): 13517db96d56Sopenharmony_ci pass 13527db96d56Sopenharmony_ci class Module(object): 13537db96d56Sopenharmony_ci @staticmethod 13547db96d56Sopenharmony_ci def setUpModule(): 13557db96d56Sopenharmony_ci print('set up module') 13567db96d56Sopenharmony_ci unittest.addModuleCleanup(bad_cleanup1) 13577db96d56Sopenharmony_ci unittest.addModuleCleanup(bad_cleanup2) 13587db96d56Sopenharmony_ci @staticmethod 13597db96d56Sopenharmony_ci def tearDownModule(): 13607db96d56Sopenharmony_ci print('tear down module') 13617db96d56Sopenharmony_ci 1/0 13627db96d56Sopenharmony_ci 13637db96d56Sopenharmony_ci Foo.__module__ = 'Module' 13647db96d56Sopenharmony_ci sys.modules['Module'] = Module 13657db96d56Sopenharmony_ci self.addCleanup(sys.modules.pop, 'Module') 13667db96d56Sopenharmony_ci suite = unittest.TestSuite([Foo('test_foo')]) 13677db96d56Sopenharmony_ci suite(result) 13687db96d56Sopenharmony_ci expected_out = '\nStdout:\ntear down module\ndo cleanup2\ndo cleanup1\n' 13697db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), expected_out) 13707db96d56Sopenharmony_ci self.assertEqual(len(result.errors), 2) 13717db96d56Sopenharmony_ci description = 'tearDownModule (Module)' 13727db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[0] 13737db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 13747db96d56Sopenharmony_ci self.assertIn('ZeroDivisionError: division by zero', formatted_exc) 13757db96d56Sopenharmony_ci self.assertNotIn('ValueError', formatted_exc) 13767db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 13777db96d56Sopenharmony_ci self.assertIn('\nStdout:\ntear down module\n', formatted_exc) 13787db96d56Sopenharmony_ci test_case, formatted_exc = result.errors[1] 13797db96d56Sopenharmony_ci self.assertEqual(test_case.description, description) 13807db96d56Sopenharmony_ci self.assertIn('ValueError: bad cleanup2', formatted_exc) 13817db96d56Sopenharmony_ci self.assertNotIn('ZeroDivisionError', formatted_exc) 13827db96d56Sopenharmony_ci self.assertNotIn('TypeError', formatted_exc) 13837db96d56Sopenharmony_ci self.assertIn(expected_out, formatted_exc) 13847db96d56Sopenharmony_ci 13857db96d56Sopenharmony_ci 13867db96d56Sopenharmony_ciif __name__ == '__main__': 13877db96d56Sopenharmony_ci unittest.main() 1388