Skip to content

Commit daf807f

Browse files
Refactor tests.
1 parent 5eb175c commit daf807f

File tree

1 file changed

+40
-64
lines changed

1 file changed

+40
-64
lines changed

Lib/unittest/test/test_async_case.py

Lines changed: 40 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import asyncio
2-
import gc
32
import unittest
3+
from test import support
44

55

66
class MyException(Exception):
@@ -14,6 +14,11 @@ def tearDownModule():
1414
class TestAsyncCase(unittest.TestCase):
1515
maxDiff = None
1616

17+
def tearDown(self):
18+
# Ensure that IsolatedAsyncioTestCase instances are destroyed before
19+
# starting a new event loop
20+
support.gc_collect()
21+
1722
def test_full_cycle(self):
1823
class Test(unittest.IsolatedAsyncioTestCase):
1924
def setUp(self):
@@ -23,12 +28,13 @@ def setUp(self):
2328
async def asyncSetUp(self):
2429
self.assertEqual(events, ['setUp'])
2530
events.append('asyncSetUp')
31+
self.addAsyncCleanup(self.on_cleanup1)
2632

2733
async def test_func(self):
2834
self.assertEqual(events, ['setUp',
2935
'asyncSetUp'])
3036
events.append('test')
31-
self.addAsyncCleanup(self.on_cleanup)
37+
self.addAsyncCleanup(self.on_cleanup2)
3238

3339
async def asyncTearDown(self):
3440
self.assertEqual(events, ['setUp',
@@ -43,19 +49,30 @@ def tearDown(self):
4349
'asyncTearDown'])
4450
events.append('tearDown')
4551

46-
async def on_cleanup(self):
52+
async def on_cleanup1(self):
53+
self.assertEqual(events, ['setUp',
54+
'asyncSetUp',
55+
'test',
56+
'asyncTearDown',
57+
'tearDown',
58+
'cleanup2'])
59+
events.append('cleanup1')
60+
61+
async def on_cleanup2(self):
4762
self.assertEqual(events, ['setUp',
4863
'asyncSetUp',
4964
'test',
5065
'asyncTearDown',
5166
'tearDown'])
52-
events.append('cleanup')
67+
events.append('cleanup2')
5368

5469
events = []
5570
test = Test("test_func")
56-
test.run()
71+
result = test.run()
72+
self.assertEqual(result.errors, [])
73+
self.assertEqual(result.failures, [])
5774
expected = ['setUp', 'asyncSetUp', 'test',
58-
'asyncTearDown', 'tearDown', 'cleanup']
75+
'asyncTearDown', 'tearDown', 'cleanup2', 'cleanup1']
5976
self.assertEqual(events, expected)
6077

6178
events = []
@@ -69,11 +86,11 @@ def test_exception_in_setup(self):
6986
class Test(unittest.IsolatedAsyncioTestCase):
7087
async def asyncSetUp(self):
7188
events.append('asyncSetUp')
89+
self.addAsyncCleanup(self.on_cleanup)
7290
raise MyException()
7391

7492
async def test_func(self):
7593
events.append('test')
76-
self.addAsyncCleanup(self.on_cleanup)
7794

7895
async def asyncTearDown(self):
7996
events.append('asyncTearDown')
@@ -85,7 +102,7 @@ async def on_cleanup(self):
85102
events = []
86103
test = Test("test_func")
87104
result = test.run()
88-
self.assertEqual(events, ['asyncSetUp'])
105+
self.assertEqual(events, ['asyncSetUp', 'cleanup'])
89106
self.assertIs(result.errors[0][0], test)
90107
self.assertIn('MyException', result.errors[0][1])
91108

@@ -99,48 +116,9 @@ async def on_cleanup(self):
99116
self.fail('Expected a MyException exception')
100117
self.assertEqual(events, ['asyncSetUp'])
101118
test.doCleanups()
102-
self.assertEqual(events, ['asyncSetUp'])
103-
del test
104-
gc.collect()
119+
self.assertEqual(events, ['asyncSetUp', 'cleanup'])
105120

106121
def test_exception_in_test(self):
107-
class Test(unittest.IsolatedAsyncioTestCase):
108-
async def asyncSetUp(self):
109-
events.append('asyncSetUp')
110-
111-
async def test_func(self):
112-
events.append('test')
113-
raise MyException()
114-
self.addAsyncCleanup(self.on_cleanup)
115-
116-
async def asyncTearDown(self):
117-
events.append('asyncTearDown')
118-
119-
async def on_cleanup(self):
120-
events.append('cleanup')
121-
122-
events = []
123-
test = Test("test_func")
124-
result = test.run()
125-
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown'])
126-
self.assertIs(result.errors[0][0], test)
127-
self.assertIn('MyException', result.errors[0][1])
128-
129-
events = []
130-
test = Test("test_func")
131-
try:
132-
test.debug()
133-
except MyException:
134-
pass
135-
else:
136-
self.fail('Expected a MyException exception')
137-
self.assertEqual(events, ['asyncSetUp', 'test'])
138-
test.doCleanups()
139-
self.assertEqual(events, ['asyncSetUp', 'test'])
140-
del test
141-
gc.collect()
142-
143-
def test_exception_in_test_after_adding_cleanup(self):
144122
class Test(unittest.IsolatedAsyncioTestCase):
145123
async def asyncSetUp(self):
146124
events.append('asyncSetUp')
@@ -174,8 +152,6 @@ async def on_cleanup(self):
174152
self.assertEqual(events, ['asyncSetUp', 'test'])
175153
test.doCleanups()
176154
self.assertEqual(events, ['asyncSetUp', 'test', 'cleanup'])
177-
del test
178-
gc.collect()
179155

180156
def test_exception_in_tear_down(self):
181157
class Test(unittest.IsolatedAsyncioTestCase):
@@ -211,8 +187,6 @@ async def on_cleanup(self):
211187
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown'])
212188
test.doCleanups()
213189
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
214-
del test
215-
gc.collect()
216190

217191
def test_exception_in_tear_clean_up(self):
218192
class Test(unittest.IsolatedAsyncioTestCase):
@@ -221,21 +195,27 @@ async def asyncSetUp(self):
221195

222196
async def test_func(self):
223197
events.append('test')
224-
self.addAsyncCleanup(self.on_cleanup)
198+
self.addAsyncCleanup(self.on_cleanup1)
199+
self.addAsyncCleanup(self.on_cleanup2)
225200

226201
async def asyncTearDown(self):
227202
events.append('asyncTearDown')
228203

229-
async def on_cleanup(self):
230-
events.append('cleanup')
231-
raise MyException()
204+
async def on_cleanup1(self):
205+
events.append('cleanup1')
206+
raise MyException('some error')
207+
208+
async def on_cleanup2(self):
209+
events.append('cleanup2')
210+
raise MyException('other error')
232211

233212
events = []
234213
test = Test("test_func")
235214
result = test.run()
236-
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
215+
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup2', 'cleanup1'])
237216
self.assertIs(result.errors[0][0], test)
238-
self.assertIn('MyException', result.errors[0][1])
217+
self.assertIn('MyException: other error', result.errors[0][1])
218+
self.assertIn('MyException: some error', result.errors[1][1])
239219

240220
events = []
241221
test = Test("test_func")
@@ -245,11 +225,9 @@ async def on_cleanup(self):
245225
pass
246226
else:
247227
self.fail('Expected a MyException exception')
248-
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
228+
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup2'])
249229
test.doCleanups()
250-
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
251-
del test
252-
gc.collect()
230+
self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup2', 'cleanup1'])
253231

254232
def test_deprecation_of_return_val_from_test(self):
255233
# Issue 41322 - deprecate return of value!=None from a test
@@ -382,8 +360,6 @@ async def cleanup(self, fut):
382360
self.assertEqual(events, ['asyncSetUp', 'test'])
383361
test.doCleanups()
384362
self.assertEqual(events, ['asyncSetUp', 'test', 'cleanup'])
385-
del test
386-
gc.collect()
387363

388364

389365
if __name__ == "__main__":

0 commit comments

Comments
 (0)