1+ # Copyright 2009-2015 Ram Rachum.
2+ # This program is distributed under the MIT license.
3+
4+ '''Testing module for `context_management.ReentrantContextManager`.'''
5+
6+ import queue as queue_module
7+
8+ from python_toolbox .context_management import idempotentify , ContextManager
9+ from python_toolbox import cute_testing
10+
11+
12+ class SomeContextManager (ContextManager ):
13+ x = 0
14+ def manage_context (self ):
15+ self .x += 1
16+ try :
17+ yield self
18+ finally :
19+ self .x -= 1
20+
21+
22+
23+ def test_idempotentify ():
24+ some_context_manager = SomeContextManager ()
25+ assert some_context_manager .x == 0
26+ with some_context_manager :
27+ assert some_context_manager .x == 1
28+ assert some_context_manager .x == 0
29+
30+ some_context_manager .__enter__ ()
31+ assert some_context_manager .x == 1
32+ some_context_manager .__enter__ ()
33+ assert some_context_manager .x == 2
34+ some_context_manager .__enter__ ()
35+ assert some_context_manager .x == 3
36+ some_context_manager .__exit__ (None , None , None )
37+ assert some_context_manager .x == 2
38+ some_context_manager .__exit__ (None , None , None )
39+ assert some_context_manager .x == 1
40+ some_context_manager .__exit__ (None , None , None )
41+ assert some_context_manager .x == 0
42+ with cute_testing .RaiseAssertor ():
43+ some_context_manager .__exit__ (None , None , None )
44+ with cute_testing .RaiseAssertor ():
45+ some_context_manager .__exit__ (None , None , None )
46+
47+ idempotent_context_manager = idempotentify (SomeContextManager ())
48+
49+ idempotent_context_manager .__enter__ ()
50+ assert idempotent_context_manager .__wrapped__ .x == 1
51+ idempotent_context_manager .__enter__ ()
52+ assert idempotent_context_manager .__wrapped__ .x == 1
53+ idempotent_context_manager .__enter__ ()
54+ assert idempotent_context_manager .__wrapped__ .x == 1
55+ idempotent_context_manager .__exit__ (None , None , None )
56+ assert idempotent_context_manager .__wrapped__ .x == 0
57+ idempotent_context_manager .__exit__ (None , None , None )
58+ assert idempotent_context_manager .__wrapped__ .x == 0
59+ idempotent_context_manager .__exit__ (None , None , None )
60+ assert idempotent_context_manager .__wrapped__ .x == 0
61+
62+
0 commit comments