1
1
# pylint: skip-file
2
2
3
+ """Tests for LogOnAccess descriptor."""
4
+
3
5
import io
4
6
import logging
5
7
import unittest
8
10
9
11
10
12
class TestLogOnAccess (unittest .TestCase ):
13
+ """Main tests for LogOnAccess descriptor."""
14
+
11
15
def setUp (self ):
16
+ """Initialize specific logger for tests."""
12
17
self .stream = io .StringIO ()
13
18
logging .getLogger ().handlers .clear ()
14
19
logging .basicConfig (level = logging .DEBUG , stream = self .stream )
15
20
16
21
def tearDown (self ):
22
+ """Close test logger."""
17
23
logging .getLogger ().handlers .clear ()
18
24
self .stream .close ()
19
25
20
26
def test_01_positive (self ):
27
+ """Test positive scenario."""
28
+
21
29
class Target :
22
30
def __init__ (self , val = "ok" ):
23
31
self .val = val
24
32
25
33
def __repr__ (self ):
26
- return "{cls }(val={self.val})". format ( cls = self . __class__ . __name__ , self = self )
34
+ return f" { self . __class__ . __name__ } (val={ self .val } )"
27
35
28
36
@advanced_descriptors .LogOnAccess
29
37
def ok (self ):
@@ -56,6 +64,8 @@ def ok(self):
56
64
self .assertEqual (self .stream .getvalue (), "DEBUG:advanced_descriptors.log_on_access:del Target(val=OK).ok\n " )
57
65
58
66
def test_02_positive_properties (self ):
67
+ """Test positive scenario with non standard settings."""
68
+
59
69
class Target :
60
70
def __init__ (self , val = "ok" ):
61
71
self .val = val
@@ -76,10 +86,12 @@ def ok(self):
76
86
self .assertEqual (target .ok , "ok" )
77
87
self .assertEqual (
78
88
self .stream .getvalue (),
79
- "INFO:advanced_descriptors.log_on_access:<Target() at 0x{id:X}>.override -> 'ok'\n " . format ( id = id ( target )) ,
89
+ f "INFO:advanced_descriptors.log_on_access:<Target() at 0x{ id ( target ) :X} >.override -> 'ok'\n " ,
80
90
)
81
91
82
92
def test_03_positive_no_log (self ):
93
+ """Test log_success flag."""
94
+
83
95
class Target :
84
96
def __init__ (self , val = "ok" ):
85
97
self .val = val
@@ -99,9 +111,11 @@ def ok(self):
99
111
self .assertEqual (self .stream .getvalue (), "" )
100
112
101
113
def test_04_negative (self ):
114
+ """Test basic negative scenario."""
115
+
102
116
class Target :
103
117
def __repr__ (self ):
104
- return "{cls}()" . format ( cls = self .__class__ .__name__ )
118
+ return f" { self .__class__ .__name__ } ()"
105
119
106
120
@advanced_descriptors .LogOnAccess
107
121
def ok (self ):
@@ -147,6 +161,8 @@ def ok(self):
147
161
)
148
162
149
163
def test_05_negative_properties (self ):
164
+ """Test negative scenario with non standard settings."""
165
+
150
166
class Target :
151
167
def __init__ (self , val = "ok" ):
152
168
self .val = val
@@ -170,11 +186,13 @@ def ok(self):
170
186
171
187
self .assertEqual (
172
188
self .stream .getvalue ().splitlines ()[0 ],
173
- "ERROR:advanced_descriptors.log_on_access:Failed: <Target() at 0x{id:X}>.override" . format ( id = id ( target )) ,
189
+ f "ERROR:advanced_descriptors.log_on_access:Failed: <Target() at 0x{ id ( target ) :X} >.override" ,
174
190
)
175
191
self .assertEqual (len (self .stream .getvalue ().splitlines ()), 1 )
176
192
177
193
def test_06_negative_no_log (self ):
194
+ """Test log_failure flag."""
195
+
178
196
class Target :
179
197
def __init__ (self , val = "ok" ):
180
198
self .val = val
@@ -196,9 +214,11 @@ def ok(self):
196
214
self .assertEqual (self .stream .getvalue (), "" )
197
215
198
216
def test_07_property_mimic (self ):
217
+ """Test property API not broken."""
218
+
199
219
class Target :
200
220
def __repr__ (self ):
201
- return "{}()" . format ( self .__class__ .__name__ )
221
+ return f" { self .__class__ .__name__ } ()"
202
222
203
223
empty = advanced_descriptors .LogOnAccess (doc = "empty_property" )
204
224
@@ -216,6 +236,8 @@ def __repr__(self):
216
236
self .assertEqual (self .stream .getvalue (), "" )
217
237
218
238
def test_08_logger (self ):
239
+ """Test with logger enforced."""
240
+
219
241
class Target :
220
242
on_init_set = advanced_descriptors .LogOnAccess (
221
243
logger = logging .getLogger ("on_init_set" ), fget = lambda self : "on_init_set"
@@ -235,7 +257,7 @@ def prop_name(self):
235
257
prop_name .logger = "prop_name"
236
258
237
259
def __repr__ (self ):
238
- return "{}()" . format ( self .__class__ .__name__ )
260
+ return f" { self .__class__ .__name__ } ()"
239
261
240
262
target = Target ()
241
263
@@ -261,6 +283,8 @@ def __repr__(self):
261
283
self .assertEqual (self .stream .getvalue (), "DEBUG:prop_name:Target().prop_name -> 'prop_name'\n " )
262
284
263
285
def test_09_logger_implemented (self ):
286
+ """Test with logger attribute available in target instance."""
287
+
264
288
class Target :
265
289
def __init__ (self , val = "ok" ):
266
290
self .val = val
@@ -300,13 +324,15 @@ def ok(self):
300
324
self .assertEqual (self .stream .getvalue (), "DEBUG:Target:del Target(val=OK).ok\n " )
301
325
302
326
def test_10_log_implemented (self ):
327
+ """Test with log attribute available in target instance."""
328
+
303
329
class Target :
304
330
def __init__ (self , val = "ok" ):
305
331
self .val = val
306
332
self .log = logging .getLogger (self .__class__ .__name__ )
307
333
308
334
def __repr__ (self ):
309
- return "{cls }(val={self.val})". format ( cls = self . __class__ . __name__ , self = self )
335
+ return f" { self . __class__ . __name__ } (val={ self .val } )"
310
336
311
337
@advanced_descriptors .LogOnAccess
312
338
def ok (self ):
0 commit comments