@@ -45,8 +45,7 @@ def walk(s):
45
45
return walk (stack ), buf .getvalue ()
46
46
47
47
48
- class TestCallStack (unittest .IsolatedAsyncioTestCase ):
49
-
48
+ class CallStackTestBase :
50
49
51
50
async def test_stack_tgroup (self ):
52
51
@@ -107,7 +106,7 @@ async def main():
107
106
])
108
107
109
108
self .assertIn (
110
- ' async TestCallStack .test_stack_tgroup()' ,
109
+ ' async CallStackTestBase .test_stack_tgroup()' ,
111
110
stack_for_c5 [1 ])
112
111
113
112
@@ -143,8 +142,11 @@ async def main():
143
142
[]
144
143
])
145
144
145
+ from pprint import pprint
146
+ pprint (stack_for_gen_nested_call [1 ])
147
+
146
148
self .assertIn (
147
- 'async generator TestCallStack .test_stack_async_gen.<locals>.gen()' ,
149
+ 'async generator CallStackTestBase .test_stack_async_gen.<locals>.gen()' ,
148
150
stack_for_gen_nested_call [1 ])
149
151
150
152
async def test_stack_gather (self ):
@@ -345,3 +347,93 @@ async def main():
345
347
)
346
348
347
349
self .assertTrue (stack_for_fut [1 ].startswith ('* Future(id=' ))
350
+
351
+
352
+ @unittest .skipIf (
353
+ not hasattr (asyncio .futures , "_c_future_add_to_awaited_by" ),
354
+ "C-accelerated asyncio call graph backend missing" ,
355
+ )
356
+ class TestCallStackC (CallStackTestBase , unittest .IsolatedAsyncioTestCase ):
357
+ def setUp (self ):
358
+ futures = asyncio .futures
359
+ tasks = asyncio .tasks
360
+
361
+ self ._Future = asyncio .Future
362
+ asyncio .Future = futures .Future = futures ._CFuture
363
+
364
+ self ._Task = asyncio .Task
365
+ asyncio .Task = tasks .Task = tasks ._CTask
366
+
367
+ self ._future_add_to_awaited_by = asyncio .future_add_to_awaited_by
368
+ futures .future_add_to_awaited_by = futures ._c_future_add_to_awaited_by
369
+ asyncio .future_add_to_awaited_by = futures .future_add_to_awaited_by
370
+
371
+ self ._future_discard_from_awaited_by = asyncio .future_discard_from_awaited_by
372
+ futures .future_discard_from_awaited_by = futures ._c_future_discard_from_awaited_by
373
+ asyncio .future_discard_from_awaited_by = futures .future_discard_from_awaited_by
374
+
375
+
376
+ def tearDown (self ):
377
+ futures = asyncio .futures
378
+ tasks = asyncio .tasks
379
+
380
+ futures .future_discard_from_awaited_by = self ._future_discard_from_awaited_by
381
+ asyncio .future_discard_from_awaited_by = self ._future_discard_from_awaited_by
382
+ del self ._future_discard_from_awaited_by
383
+
384
+ futures .future_add_to_awaited_by = self ._future_add_to_awaited_by
385
+ asyncio .future_add_to_awaited_by = self ._future_add_to_awaited_by
386
+ del self ._future_add_to_awaited_by
387
+
388
+ asyncio .Task = self ._Task
389
+ tasks = self ._Task
390
+ del self ._Task
391
+
392
+ asyncio .Future = self ._Future
393
+ futures .Future = self ._Future
394
+ del self ._Future
395
+
396
+
397
+ @unittest .skipIf (
398
+ not hasattr (asyncio .futures , "_py_future_add_to_awaited_by" ),
399
+ "Pure Python asyncio call graph backend missing" ,
400
+ )
401
+ class TestCallStackPy (CallStackTestBase , unittest .IsolatedAsyncioTestCase ):
402
+ def setUp (self ):
403
+ futures = asyncio .futures
404
+ tasks = asyncio .tasks
405
+
406
+ self ._Future = asyncio .Future
407
+ asyncio .Future = futures .Future = futures ._PyFuture
408
+
409
+ self ._Task = asyncio .Task
410
+ asyncio .Task = tasks .Task = tasks ._PyTask
411
+
412
+ self ._future_add_to_awaited_by = asyncio .future_add_to_awaited_by
413
+ futures .future_add_to_awaited_by = futures ._py_future_add_to_awaited_by
414
+ asyncio .future_add_to_awaited_by = futures .future_add_to_awaited_by
415
+
416
+ self ._future_discard_from_awaited_by = asyncio .future_discard_from_awaited_by
417
+ futures .future_discard_from_awaited_by = futures ._py_future_discard_from_awaited_by
418
+ asyncio .future_discard_from_awaited_by = futures .future_discard_from_awaited_by
419
+
420
+
421
+ def tearDown (self ):
422
+ futures = asyncio .futures
423
+ tasks = asyncio .tasks
424
+
425
+ futures .future_discard_from_awaited_by = self ._future_discard_from_awaited_by
426
+ asyncio .future_discard_from_awaited_by = self ._future_discard_from_awaited_by
427
+ del self ._future_discard_from_awaited_by
428
+
429
+ futures .future_add_to_awaited_by = self ._future_add_to_awaited_by
430
+ asyncio .future_add_to_awaited_by = self ._future_add_to_awaited_by
431
+ del self ._future_add_to_awaited_by
432
+
433
+ asyncio .Task = self ._Task
434
+ tasks = self ._Task
435
+ del self ._Task
436
+
437
+ asyncio .Future = self ._Future
438
+ futures .Future = self ._Future
439
+ del self ._Future
0 commit comments