@@ -22,6 +22,76 @@ def exec_after():
22
22
before_mock .assert_called_once ()
23
23
after_mock .assert_called_once ()
24
24
25
+ def test_context__with_args (self ):
26
+ def the_answer (value ):
27
+ assert value == 42
28
+ return "it's 42"
29
+ def exec_before (value ):
30
+ assert value == 'before_and_after'
31
+ def exec_after (value ):
32
+ assert value == 'before_and_after'
33
+
34
+ with context (the_answer , 'before_and_after' , exec_before = exec_before , exec_after = exec_after ) as target : # value can be passed as a param
35
+ assert target (42 ) == "it's 42"
36
+ args = ['before_and_after' ]
37
+ with context (the_answer , * args , exec_before = exec_before , exec_after = exec_after ) as target : # or as an *args object at the start
38
+ assert target (42 ) == "it's 42"
39
+ with context (the_answer , exec_before = exec_before , exec_after = exec_after , * args ) as target : # or as an *args object at the end
40
+ assert target (42 ) == "it's 42"
41
+
42
+ def test_context__with_kwargs (self ):
43
+ value_before_and_after = {'before_and_after' : 42 }
44
+ value_target = {'target' : 42 }
45
+ return_value = "value was value_target"
46
+
47
+ def an_dict (value ):
48
+ assert value == value_target
49
+ return return_value
50
+ def exec_before (value ):
51
+ assert value == value_before_and_after
52
+ def exec_after (value ):
53
+ assert value == value_before_and_after
54
+
55
+ with context (an_dict , value_before_and_after , exec_before = exec_before , exec_after = exec_after ) as target : # value can be passed as a param
56
+ assert target (value_target ) == return_value
57
+
58
+ an_dict = {'answer' : 42 }
59
+
60
+ def target (value ):
61
+ assert value == an_dict
62
+ return context
63
+
64
+ def exec_before (value ):
65
+ assert value == an_dict
66
+
67
+ def exec_after (value ):
68
+ assert value == an_dict
69
+
70
+ with context (target , an_dict , exec_before = exec_before , exec_after = exec_after ) as target : # value can be passed as a param
71
+ assert target (an_dict ) == context
72
+
73
+ def test_context__with_kwargs_as_locals (self ):
74
+ """
75
+ shows an example of how to use the kwargs to pass data to the target function
76
+ """
77
+ def target (data ):
78
+ assert data == {'in_exec_before' : 2 , 'raw_data' : 1 }
79
+ data ['in_target' ] = 3
80
+ return data
81
+
82
+ def exec_before (data ):
83
+ assert data == {'raw_data' : 1 }
84
+ data ['in_exec_before' ] = 2
85
+
86
+ def exec_after (data ):
87
+ assert data == {'in_exec_before' : 2 , 'in_target' : 3 , 'raw_data' : 1 }
88
+ data ['in_exec_after' ] = 4
89
+
90
+ raw_data = {'raw_data' : 1 }
91
+ with context (target , raw_data , exec_before = exec_before , exec_after = exec_after ) as target :
92
+ assert target (raw_data ) == {'in_exec_before' : 2 , 'in_target' : 3 , 'raw_data' : 1 }
93
+ assert raw_data == {'in_exec_before' : 2 , 'in_target' : 3 , 'in_exec_after' : 4 , 'raw_data' : 1 }
94
+
25
95
def test_exec_before_and_after_called (self ):
26
96
before_mock = MagicMock ()
27
97
after_mock = MagicMock ()
0 commit comments