1
1
# mypy: disable-error-code="attr-defined"
2
+ # mypy: disallow-untyped-defs
2
3
import logging
4
+ from typing import Iterator
3
5
4
6
import pytest
5
7
from _pytest .logging import caplog_records_key
9
11
sublogger = logging .getLogger (__name__ + ".baz" )
10
12
11
13
12
- @pytest .fixture
13
- def cleanup_disabled_logging ():
14
+ @pytest .fixture ( autouse = True )
15
+ def cleanup_disabled_logging () -> Iterator [ None ] :
14
16
"""Simple fixture that ensures that a test doesn't disable logging.
15
17
16
18
This is necessary because ``logging.disable()`` is global, so a test disabling logging
@@ -27,7 +29,7 @@ def test_fixture_help(pytester: Pytester) -> None:
27
29
result .stdout .fnmatch_lines (["*caplog*" ])
28
30
29
31
30
- def test_change_level (caplog ) :
32
+ def test_change_level (caplog : pytest . LogCaptureFixture ) -> None :
31
33
caplog .set_level (logging .INFO )
32
34
logger .debug ("handler DEBUG level" )
33
35
logger .info ("handler INFO level" )
@@ -42,7 +44,7 @@ def test_change_level(caplog):
42
44
assert "CRITICAL" in caplog .text
43
45
44
46
45
- def test_change_level_logging_disabled (caplog , cleanup_disabled_logging ) :
47
+ def test_change_level_logging_disabled (caplog : pytest . LogCaptureFixture ) -> None :
46
48
logging .disable (logging .CRITICAL )
47
49
assert logging .root .manager .disable == logging .CRITICAL
48
50
caplog .set_level (logging .WARNING )
@@ -85,9 +87,7 @@ def test2(caplog):
85
87
result .stdout .no_fnmatch_line ("*log from test2*" )
86
88
87
89
88
- def test_change_disabled_level_undo (
89
- pytester : Pytester , cleanup_disabled_logging
90
- ) -> None :
90
+ def test_change_disabled_level_undo (pytester : Pytester ) -> None :
91
91
"""Ensure that '_force_enable_logging' in 'set_level' is undone after the end of the test.
92
92
93
93
Tests the logging output themselves (affected by disabled logging level).
@@ -144,7 +144,7 @@ def test3(caplog):
144
144
result .assert_outcomes (passed = 3 )
145
145
146
146
147
- def test_with_statement (caplog ) :
147
+ def test_with_statement (caplog : pytest . LogCaptureFixture ) -> None :
148
148
with caplog .at_level (logging .INFO ):
149
149
logger .debug ("handler DEBUG level" )
150
150
logger .info ("handler INFO level" )
@@ -159,7 +159,7 @@ def test_with_statement(caplog):
159
159
assert "CRITICAL" in caplog .text
160
160
161
161
162
- def test_with_statement_logging_disabled (caplog , cleanup_disabled_logging ) :
162
+ def test_with_statement_logging_disabled (caplog : pytest . LogCaptureFixture ) -> None :
163
163
logging .disable (logging .CRITICAL )
164
164
assert logging .root .manager .disable == logging .CRITICAL
165
165
with caplog .at_level (logging .WARNING ):
@@ -198,8 +198,8 @@ def test_with_statement_logging_disabled(caplog, cleanup_disabled_logging):
198
198
],
199
199
)
200
200
def test_force_enable_logging_level_string (
201
- caplog , cleanup_disabled_logging , level_str , expected_disable_level
202
- ):
201
+ caplog : pytest . LogCaptureFixture , level_str : str , expected_disable_level : int
202
+ ) -> None :
203
203
"""Test _force_enable_logging using a level string.
204
204
205
205
``expected_disable_level`` is one level below ``level_str`` because the disabled log level
@@ -218,15 +218,15 @@ def test_force_enable_logging_level_string(
218
218
assert test_logger .manager .disable == expected_disable_level
219
219
220
220
221
- def test_log_access (caplog ) :
221
+ def test_log_access (caplog : pytest . LogCaptureFixture ) -> None :
222
222
caplog .set_level (logging .INFO )
223
223
logger .info ("boo %s" , "arg" )
224
224
assert caplog .records [0 ].levelname == "INFO"
225
225
assert caplog .records [0 ].msg == "boo %s"
226
226
assert "boo arg" in caplog .text
227
227
228
228
229
- def test_messages (caplog ) :
229
+ def test_messages (caplog : pytest . LogCaptureFixture ) -> None :
230
230
caplog .set_level (logging .INFO )
231
231
logger .info ("boo %s" , "arg" )
232
232
logger .info ("bar %s\n baz %s" , "arg1" , "arg2" )
@@ -247,22 +247,22 @@ def test_messages(caplog):
247
247
assert "Exception" not in caplog .messages [- 1 ]
248
248
249
249
250
- def test_record_tuples (caplog ) :
250
+ def test_record_tuples (caplog : pytest . LogCaptureFixture ) -> None :
251
251
caplog .set_level (logging .INFO )
252
252
logger .info ("boo %s" , "arg" )
253
253
254
254
assert caplog .record_tuples == [(__name__ , logging .INFO , "boo arg" )]
255
255
256
256
257
- def test_unicode (caplog ) :
257
+ def test_unicode (caplog : pytest . LogCaptureFixture ) -> None :
258
258
caplog .set_level (logging .INFO )
259
259
logger .info ("bū" )
260
260
assert caplog .records [0 ].levelname == "INFO"
261
261
assert caplog .records [0 ].msg == "bū"
262
262
assert "bū" in caplog .text
263
263
264
264
265
- def test_clear (caplog ) :
265
+ def test_clear (caplog : pytest . LogCaptureFixture ) -> None :
266
266
caplog .set_level (logging .INFO )
267
267
logger .info ("bū" )
268
268
assert len (caplog .records )
@@ -273,15 +273,19 @@ def test_clear(caplog):
273
273
274
274
275
275
@pytest .fixture
276
- def logging_during_setup_and_teardown (caplog ):
276
+ def logging_during_setup_and_teardown (
277
+ caplog : pytest .LogCaptureFixture ,
278
+ ) -> Iterator [None ]:
277
279
caplog .set_level ("INFO" )
278
280
logger .info ("a_setup_log" )
279
281
yield
280
282
logger .info ("a_teardown_log" )
281
283
assert [x .message for x in caplog .get_records ("teardown" )] == ["a_teardown_log" ]
282
284
283
285
284
- def test_caplog_captures_for_all_stages (caplog , logging_during_setup_and_teardown ):
286
+ def test_caplog_captures_for_all_stages (
287
+ caplog : pytest .LogCaptureFixture , logging_during_setup_and_teardown : None
288
+ ) -> None :
285
289
assert not caplog .records
286
290
assert not caplog .get_records ("call" )
287
291
logger .info ("a_call_log" )
@@ -290,25 +294,31 @@ def test_caplog_captures_for_all_stages(caplog, logging_during_setup_and_teardow
290
294
assert [x .message for x in caplog .get_records ("setup" )] == ["a_setup_log" ]
291
295
292
296
# This reaches into private API, don't use this type of thing in real tests!
293
- assert set (caplog ._item .stash [caplog_records_key ]) == {"setup" , "call" }
297
+ caplog_records = caplog ._item .stash [caplog_records_key ]
298
+ assert set (caplog_records ) == {"setup" , "call" }
294
299
295
300
296
- def test_clear_for_call_stage (caplog , logging_during_setup_and_teardown ):
301
+ def test_clear_for_call_stage (
302
+ caplog : pytest .LogCaptureFixture , logging_during_setup_and_teardown : None
303
+ ) -> None :
297
304
logger .info ("a_call_log" )
298
305
assert [x .message for x in caplog .get_records ("call" )] == ["a_call_log" ]
299
306
assert [x .message for x in caplog .get_records ("setup" )] == ["a_setup_log" ]
300
- assert set (caplog ._item .stash [caplog_records_key ]) == {"setup" , "call" }
307
+ caplog_records = caplog ._item .stash [caplog_records_key ]
308
+ assert set (caplog_records ) == {"setup" , "call" }
301
309
302
310
caplog .clear ()
303
311
304
312
assert caplog .get_records ("call" ) == []
305
313
assert [x .message for x in caplog .get_records ("setup" )] == ["a_setup_log" ]
306
- assert set (caplog ._item .stash [caplog_records_key ]) == {"setup" , "call" }
314
+ caplog_records = caplog ._item .stash [caplog_records_key ]
315
+ assert set (caplog_records ) == {"setup" , "call" }
307
316
308
317
logging .info ("a_call_log_after_clear" )
309
318
assert [x .message for x in caplog .get_records ("call" )] == ["a_call_log_after_clear" ]
310
319
assert [x .message for x in caplog .get_records ("setup" )] == ["a_setup_log" ]
311
- assert set (caplog ._item .stash [caplog_records_key ]) == {"setup" , "call" }
320
+ caplog_records = caplog ._item .stash [caplog_records_key ]
321
+ assert set (caplog_records ) == {"setup" , "call" }
312
322
313
323
314
324
def test_ini_controls_global_log_level (pytester : Pytester ) -> None :
0 commit comments