@@ -2630,6 +2630,68 @@ async def main():
26302630 finally :
26312631 loop .close ()
26322632
2633+ def test_context_not_a_context (self ):
2634+ # gh-157301
2635+ async def coro ():
2636+ pass
2637+
2638+ loop = asyncio .new_event_loop ()
2639+ c = coro ()
2640+ try :
2641+ with self .assertRaises (TypeError ):
2642+ self .new_task (loop , c , context = 'not a context' )
2643+ finally :
2644+ c .close ()
2645+ loop .close ()
2646+
2647+ def test_context_not_a_context_leaves_loop_usable (self ):
2648+ # gh-157301
2649+ async def coro ():
2650+ pass
2651+
2652+ async def main ():
2653+ c = coro ()
2654+ try :
2655+ with self .assertRaises (TypeError ):
2656+ self .new_task (loop , c , context = 'not a context' ,
2657+ eager_start = True )
2658+ finally :
2659+ c .close ()
2660+ await asyncio .sleep (0 )
2661+
2662+ loop = asyncio .new_event_loop ()
2663+ loop .call_later (support .SHORT_TIMEOUT , loop .stop )
2664+ try :
2665+ loop .run_until_complete (self .new_task (loop , main ()))
2666+ finally :
2667+ loop .close ()
2668+
2669+ def test_context_already_entered_leaves_loop_usable (self ):
2670+ # gh-157301
2671+ async def coro ():
2672+ pass
2673+
2674+ async def main ():
2675+ ctx = contextvars .copy_context ()
2676+
2677+ def inside ():
2678+ c = coro ()
2679+ try :
2680+ with self .assertRaises (RuntimeError ):
2681+ self .new_task (loop , c , context = ctx , eager_start = True )
2682+ finally :
2683+ c .close ()
2684+
2685+ ctx .run (inside )
2686+ await asyncio .sleep (0 )
2687+
2688+ loop = asyncio .new_event_loop ()
2689+ loop .call_later (support .SHORT_TIMEOUT , loop .stop )
2690+ try :
2691+ loop .run_until_complete (self .new_task (loop , main ()))
2692+ finally :
2693+ loop .close ()
2694+
26332695 def test_context_2 (self ):
26342696 cvar = contextvars .ContextVar ('cvar' , default = 'nope' )
26352697
@@ -2843,7 +2905,7 @@ class Break:
28432905 def __str__ (self ):
28442906 raise RuntimeError ("break" )
28452907
2846- obj = object ()
2908+ obj = contextvars . copy_context ()
28472909 initial_refcount = sys .getrefcount (obj )
28482910
28492911 coro = coroutine_function ()
0 commit comments