@@ -240,6 +240,48 @@ def setStream(self, stream): # noqa: N802
240240 logger .handlers = []
241241
242242
243+ def test_wrap_logging_uses_handler_snapshot (monkeypatch ) -> None :
244+ reset_wrapped_streams ()
245+
246+ stream = io .StringIO ()
247+ monkeypatch .setattr (sys , 'stderr' , stream )
248+ monkeypatch .setattr (progressbar .streams , 'original_stderr' , stream )
249+ monkeypatch .setattr (progressbar .streams , 'stderr' , stream )
250+
251+ logger = logging .getLogger ('progressbar-test-mutating-handlers' )
252+ logger .handlers = []
253+ logger .propagate = False
254+ first_handler = logging .StreamHandler (sys .stderr )
255+ late_handler = logging .StreamHandler (sys .stderr )
256+ logger .addHandler (first_handler )
257+
258+ wrapped_handlers : list [logging .StreamHandler ] = []
259+ original_wrap_handler = progressbar .streams ._wrap_logging_handler
260+
261+ def mutating_wrap_handler (handler , wrapped_streams , restore_streams ):
262+ wrapped_handlers .append (handler )
263+ if handler is first_handler :
264+ logger .addHandler (late_handler )
265+ original_wrap_handler (handler , wrapped_streams , restore_streams )
266+
267+ monkeypatch .setattr (
268+ progressbar .streams ,
269+ '_wrap_logging_handler' ,
270+ mutating_wrap_handler ,
271+ )
272+
273+ progressbar .streams .wrap_stderr ()
274+ try :
275+ progressbar .streams .wrap_logging ()
276+ assert first_handler in wrapped_handlers
277+ assert late_handler not in wrapped_handlers
278+ assert late_handler .stream is stream
279+ finally :
280+ progressbar .streams .unwrap_logging ()
281+ progressbar .streams .unwrap (stderr = True )
282+ logger .handlers = []
283+
284+
243285def test_unwrap_logging_ignores_dynamic_stderr_handler (monkeypatch ) -> None :
244286 reset_wrapped_streams ()
245287
0 commit comments