1import asyncio 2import unittest 3 4 5def tearDownModule(): 6 asyncio.set_event_loop_policy(None) 7 8 9class TestAsyncCase(unittest.TestCase): 10 def test_full_cycle(self): 11 events = [] 12 13 class Test(unittest.IsolatedAsyncioTestCase): 14 def setUp(self): 15 self.assertEqual(events, []) 16 events.append('setUp') 17 18 async def asyncSetUp(self): 19 self.assertEqual(events, ['setUp']) 20 events.append('asyncSetUp') 21 22 async def test_func(self): 23 self.assertEqual(events, ['setUp', 24 'asyncSetUp']) 25 events.append('test') 26 self.addAsyncCleanup(self.on_cleanup) 27 28 async def asyncTearDown(self): 29 self.assertEqual(events, ['setUp', 30 'asyncSetUp', 31 'test']) 32 events.append('asyncTearDown') 33 34 def tearDown(self): 35 self.assertEqual(events, ['setUp', 36 'asyncSetUp', 37 'test', 38 'asyncTearDown']) 39 events.append('tearDown') 40 41 async def on_cleanup(self): 42 self.assertEqual(events, ['setUp', 43 'asyncSetUp', 44 'test', 45 'asyncTearDown', 46 'tearDown']) 47 events.append('cleanup') 48 49 test = Test("test_func") 50 test.run() 51 self.assertEqual(events, ['setUp', 52 'asyncSetUp', 53 'test', 54 'asyncTearDown', 55 'tearDown', 56 'cleanup']) 57 58 def test_exception_in_setup(self): 59 events = [] 60 61 class Test(unittest.IsolatedAsyncioTestCase): 62 async def asyncSetUp(self): 63 events.append('asyncSetUp') 64 raise Exception() 65 66 async def test_func(self): 67 events.append('test') 68 self.addAsyncCleanup(self.on_cleanup) 69 70 async def asyncTearDown(self): 71 events.append('asyncTearDown') 72 73 async def on_cleanup(self): 74 events.append('cleanup') 75 76 77 test = Test("test_func") 78 test.run() 79 self.assertEqual(events, ['asyncSetUp']) 80 81 def test_exception_in_test(self): 82 events = [] 83 84 class Test(unittest.IsolatedAsyncioTestCase): 85 async def asyncSetUp(self): 86 events.append('asyncSetUp') 87 88 async def test_func(self): 89 events.append('test') 90 raise Exception() 91 self.addAsyncCleanup(self.on_cleanup) 92 93 async def asyncTearDown(self): 94 events.append('asyncTearDown') 95 96 async def on_cleanup(self): 97 events.append('cleanup') 98 99 test = Test("test_func") 100 test.run() 101 self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown']) 102 103 def test_exception_in_test_after_adding_cleanup(self): 104 events = [] 105 106 class Test(unittest.IsolatedAsyncioTestCase): 107 async def asyncSetUp(self): 108 events.append('asyncSetUp') 109 110 async def test_func(self): 111 events.append('test') 112 self.addAsyncCleanup(self.on_cleanup) 113 raise Exception() 114 115 async def asyncTearDown(self): 116 events.append('asyncTearDown') 117 118 async def on_cleanup(self): 119 events.append('cleanup') 120 121 test = Test("test_func") 122 test.run() 123 self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup']) 124 125 def test_exception_in_tear_down(self): 126 events = [] 127 128 class Test(unittest.IsolatedAsyncioTestCase): 129 async def asyncSetUp(self): 130 events.append('asyncSetUp') 131 132 async def test_func(self): 133 events.append('test') 134 self.addAsyncCleanup(self.on_cleanup) 135 136 async def asyncTearDown(self): 137 events.append('asyncTearDown') 138 raise Exception() 139 140 async def on_cleanup(self): 141 events.append('cleanup') 142 143 test = Test("test_func") 144 test.run() 145 self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup']) 146 147 148 def test_exception_in_tear_clean_up(self): 149 events = [] 150 151 class Test(unittest.IsolatedAsyncioTestCase): 152 async def asyncSetUp(self): 153 events.append('asyncSetUp') 154 155 async def test_func(self): 156 events.append('test') 157 self.addAsyncCleanup(self.on_cleanup) 158 159 async def asyncTearDown(self): 160 events.append('asyncTearDown') 161 162 async def on_cleanup(self): 163 events.append('cleanup') 164 raise Exception() 165 166 test = Test("test_func") 167 test.run() 168 self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup']) 169 170 def test_cleanups_interleave_order(self): 171 events = [] 172 173 class Test(unittest.IsolatedAsyncioTestCase): 174 async def test_func(self): 175 self.addAsyncCleanup(self.on_sync_cleanup, 1) 176 self.addAsyncCleanup(self.on_async_cleanup, 2) 177 self.addAsyncCleanup(self.on_sync_cleanup, 3) 178 self.addAsyncCleanup(self.on_async_cleanup, 4) 179 180 async def on_sync_cleanup(self, val): 181 events.append(f'sync_cleanup {val}') 182 183 async def on_async_cleanup(self, val): 184 events.append(f'async_cleanup {val}') 185 186 test = Test("test_func") 187 test.run() 188 self.assertEqual(events, ['async_cleanup 4', 189 'sync_cleanup 3', 190 'async_cleanup 2', 191 'sync_cleanup 1']) 192 193 194if __name__ == "__main__": 195 unittest.main() 196