@@ -440,6 +440,59 @@ def fun():
440440
441441        ctx .run (fun )
442442
443+     def  test_token_contextmanager_multiple_c_set (self ):
444+         ctx  =  contextvars .Context ()
445+         c  =  contextvars .ContextVar ('c' , default = 42 )
446+ 
447+         def  fun ():
448+             with  c .set (36 ):
449+                 self .assertEqual (c .get (), 36 )
450+                 c .set (24 )
451+                 self .assertEqual (c .get (), 24 )
452+                 c .set (12 )
453+                 self .assertEqual (c .get (), 12 )
454+ 
455+             self .assertEqual (c .get (), 42 )
456+ 
457+         ctx .run (fun )
458+ 
459+     def  test_token_contextmanager_with_explicit_reset_the_same_token (self ):
460+         ctx  =  contextvars .Context ()
461+         c  =  contextvars .ContextVar ('c' , default = 42 )
462+ 
463+         def  fun ():
464+             with  self .assertRaisesRegex (
465+                     RuntimeError ,
466+                     "<Token .+ has already been used once" 
467+             ):
468+                 with  c .set (36 ) as  token :
469+                     self .assertEqual (c .get (), 36 )
470+                     c .reset (token )
471+ 
472+                     self .assertEqual (c .get (), 42 )
473+ 
474+             self .assertEqual (c .get (), 42 )
475+ 
476+         ctx .run (fun )
477+ 
478+     def  test_token_contextmanager_with_explicit_reset_another_token (self ):
479+         ctx  =  contextvars .Context ()
480+         c  =  contextvars .ContextVar ('c' , default = 42 )
481+ 
482+         def  fun ():
483+             with  c .set (36 ):
484+                 self .assertEqual (c .get (), 36 )
485+ 
486+                 token  =  c .set (24 )
487+                 self .assertEqual (c .get (), 24 )
488+                 c .reset (token )
489+                 self .assertEqual (c .get (), 36 )
490+ 
491+             self .assertEqual (c .get (), 42 )
492+ 
493+         ctx .run (fun )
494+ 
495+ 
443496# HAMT Tests 
444497
445498
0 commit comments