Skip to content

Commit 12be23d

Browse files
committed
More tests
1 parent 4e09df8 commit 12be23d

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

Lib/test/test_context.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)