@@ -2745,6 +2745,68 @@ async def main():
27452745 finally :
27462746 loop .close ()
27472747
2748+ def test_context_not_a_context (self ):
2749+ # gh-157301
2750+ async def coro ():
2751+ pass
2752+
2753+ loop = asyncio .new_event_loop ()
2754+ c = coro ()
2755+ try :
2756+ with self .assertRaises (TypeError ):
2757+ self .new_task (loop , c , context = 'not a context' )
2758+ finally :
2759+ c .close ()
2760+ loop .close ()
2761+
2762+ def test_context_not_a_context_leaves_loop_usable (self ):
2763+ # gh-157301
2764+ async def coro ():
2765+ pass
2766+
2767+ async def main ():
2768+ c = coro ()
2769+ try :
2770+ with self .assertRaises (TypeError ):
2771+ self .new_task (loop , c , context = 'not a context' ,
2772+ eager_start = True )
2773+ finally :
2774+ c .close ()
2775+ await asyncio .sleep (0 )
2776+
2777+ loop = asyncio .new_event_loop ()
2778+ loop .call_later (support .SHORT_TIMEOUT , loop .stop )
2779+ try :
2780+ loop .run_until_complete (self .new_task (loop , main ()))
2781+ finally :
2782+ loop .close ()
2783+
2784+ def test_context_already_entered_leaves_loop_usable (self ):
2785+ # gh-157301
2786+ async def coro ():
2787+ pass
2788+
2789+ async def main ():
2790+ ctx = contextvars .copy_context ()
2791+
2792+ def inside ():
2793+ c = coro ()
2794+ try :
2795+ with self .assertRaises (RuntimeError ):
2796+ self .new_task (loop , c , context = ctx , eager_start = True )
2797+ finally :
2798+ c .close ()
2799+
2800+ ctx .run (inside )
2801+ await asyncio .sleep (0 )
2802+
2803+ loop = asyncio .new_event_loop ()
2804+ loop .call_later (support .SHORT_TIMEOUT , loop .stop )
2805+ try :
2806+ loop .run_until_complete (self .new_task (loop , main ()))
2807+ finally :
2808+ loop .close ()
2809+
27482810 def test_context_2 (self ):
27492811 cvar = contextvars .ContextVar ('cvar' , default = 'nope' )
27502812
@@ -2958,7 +3020,7 @@ class Break:
29583020 def __str__ (self ):
29593021 raise RuntimeError ("break" )
29603022
2961- obj = object ()
3023+ obj = contextvars . copy_context ()
29623024 initial_refcount = sys .getrefcount (obj )
29633025
29643026 coro = coroutine_function ()
0 commit comments