1
1
import asyncio
2
- import gc
3
2
import unittest
3
+ from test import support
4
4
5
5
6
6
class MyException (Exception ):
@@ -14,6 +14,11 @@ def tearDownModule():
14
14
class TestAsyncCase (unittest .TestCase ):
15
15
maxDiff = None
16
16
17
+ def tearDown (self ):
18
+ # Ensure that IsolatedAsyncioTestCase instances are destroyed before
19
+ # starting a new event loop
20
+ support .gc_collect ()
21
+
17
22
def test_full_cycle (self ):
18
23
class Test (unittest .IsolatedAsyncioTestCase ):
19
24
def setUp (self ):
@@ -23,12 +28,13 @@ def setUp(self):
23
28
async def asyncSetUp (self ):
24
29
self .assertEqual (events , ['setUp' ])
25
30
events .append ('asyncSetUp' )
31
+ self .addAsyncCleanup (self .on_cleanup1 )
26
32
27
33
async def test_func (self ):
28
34
self .assertEqual (events , ['setUp' ,
29
35
'asyncSetUp' ])
30
36
events .append ('test' )
31
- self .addAsyncCleanup (self .on_cleanup )
37
+ self .addAsyncCleanup (self .on_cleanup2 )
32
38
33
39
async def asyncTearDown (self ):
34
40
self .assertEqual (events , ['setUp' ,
@@ -43,19 +49,30 @@ def tearDown(self):
43
49
'asyncTearDown' ])
44
50
events .append ('tearDown' )
45
51
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 ):
47
62
self .assertEqual (events , ['setUp' ,
48
63
'asyncSetUp' ,
49
64
'test' ,
50
65
'asyncTearDown' ,
51
66
'tearDown' ])
52
- events .append ('cleanup ' )
67
+ events .append ('cleanup2 ' )
53
68
54
69
events = []
55
70
test = Test ("test_func" )
56
- test .run ()
71
+ result = test .run ()
72
+ self .assertEqual (result .errors , [])
73
+ self .assertEqual (result .failures , [])
57
74
expected = ['setUp' , 'asyncSetUp' , 'test' ,
58
- 'asyncTearDown' , 'tearDown' , 'cleanup ' ]
75
+ 'asyncTearDown' , 'tearDown' , 'cleanup2' , 'cleanup1 ' ]
59
76
self .assertEqual (events , expected )
60
77
61
78
events = []
@@ -69,11 +86,11 @@ def test_exception_in_setup(self):
69
86
class Test (unittest .IsolatedAsyncioTestCase ):
70
87
async def asyncSetUp (self ):
71
88
events .append ('asyncSetUp' )
89
+ self .addAsyncCleanup (self .on_cleanup )
72
90
raise MyException ()
73
91
74
92
async def test_func (self ):
75
93
events .append ('test' )
76
- self .addAsyncCleanup (self .on_cleanup )
77
94
78
95
async def asyncTearDown (self ):
79
96
events .append ('asyncTearDown' )
@@ -85,7 +102,7 @@ async def on_cleanup(self):
85
102
events = []
86
103
test = Test ("test_func" )
87
104
result = test .run ()
88
- self .assertEqual (events , ['asyncSetUp' ])
105
+ self .assertEqual (events , ['asyncSetUp' , 'cleanup' ])
89
106
self .assertIs (result .errors [0 ][0 ], test )
90
107
self .assertIn ('MyException' , result .errors [0 ][1 ])
91
108
@@ -99,48 +116,9 @@ async def on_cleanup(self):
99
116
self .fail ('Expected a MyException exception' )
100
117
self .assertEqual (events , ['asyncSetUp' ])
101
118
test .doCleanups ()
102
- self .assertEqual (events , ['asyncSetUp' ])
103
- del test
104
- gc .collect ()
119
+ self .assertEqual (events , ['asyncSetUp' , 'cleanup' ])
105
120
106
121
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 ):
144
122
class Test (unittest .IsolatedAsyncioTestCase ):
145
123
async def asyncSetUp (self ):
146
124
events .append ('asyncSetUp' )
@@ -174,8 +152,6 @@ async def on_cleanup(self):
174
152
self .assertEqual (events , ['asyncSetUp' , 'test' ])
175
153
test .doCleanups ()
176
154
self .assertEqual (events , ['asyncSetUp' , 'test' , 'cleanup' ])
177
- del test
178
- gc .collect ()
179
155
180
156
def test_exception_in_tear_down (self ):
181
157
class Test (unittest .IsolatedAsyncioTestCase ):
@@ -211,8 +187,6 @@ async def on_cleanup(self):
211
187
self .assertEqual (events , ['asyncSetUp' , 'test' , 'asyncTearDown' ])
212
188
test .doCleanups ()
213
189
self .assertEqual (events , ['asyncSetUp' , 'test' , 'asyncTearDown' , 'cleanup' ])
214
- del test
215
- gc .collect ()
216
190
217
191
def test_exception_in_tear_clean_up (self ):
218
192
class Test (unittest .IsolatedAsyncioTestCase ):
@@ -221,21 +195,27 @@ async def asyncSetUp(self):
221
195
222
196
async def test_func (self ):
223
197
events .append ('test' )
224
- self .addAsyncCleanup (self .on_cleanup )
198
+ self .addAsyncCleanup (self .on_cleanup1 )
199
+ self .addAsyncCleanup (self .on_cleanup2 )
225
200
226
201
async def asyncTearDown (self ):
227
202
events .append ('asyncTearDown' )
228
203
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' )
232
211
233
212
events = []
234
213
test = Test ("test_func" )
235
214
result = test .run ()
236
- self .assertEqual (events , ['asyncSetUp' , 'test' , 'asyncTearDown' , 'cleanup ' ])
215
+ self .assertEqual (events , ['asyncSetUp' , 'test' , 'asyncTearDown' , 'cleanup2' , 'cleanup1 ' ])
237
216
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 ])
239
219
240
220
events = []
241
221
test = Test ("test_func" )
@@ -245,11 +225,9 @@ async def on_cleanup(self):
245
225
pass
246
226
else :
247
227
self .fail ('Expected a MyException exception' )
248
- self .assertEqual (events , ['asyncSetUp' , 'test' , 'asyncTearDown' , 'cleanup ' ])
228
+ self .assertEqual (events , ['asyncSetUp' , 'test' , 'asyncTearDown' , 'cleanup2 ' ])
249
229
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' ])
253
231
254
232
def test_deprecation_of_return_val_from_test (self ):
255
233
# Issue 41322 - deprecate return of value!=None from a test
@@ -382,8 +360,6 @@ async def cleanup(self, fut):
382
360
self .assertEqual (events , ['asyncSetUp' , 'test' ])
383
361
test .doCleanups ()
384
362
self .assertEqual (events , ['asyncSetUp' , 'test' , 'cleanup' ])
385
- del test
386
- gc .collect ()
387
363
388
364
389
365
if __name__ == "__main__" :
0 commit comments