@@ -315,11 +315,10 @@ def test_factory_ensure_initialized_behavior(self):
315315 LoggerFactory ._ensure_initialized ()
316316 assert LoggerFactory ._initialized is True
317317
318- def test_factory_atexit_cleanup_error_handling (self ):
319- """Test atexit cleanup error handling."""
320-
321- # Mock the clear_registry method to raise an expected error type
322- with patch .object (LoggerFactory , 'clear_registry' , side_effect = OSError ("Test error" )):
318+ @pytest .mark .parametrize ("error_type" , [OSError , ValueError , RuntimeError ])
319+ def test_factory_atexit_cleanup_error_handling (self , error_type ):
320+ """Test atexit cleanup handles expected exceptions gracefully."""
321+ with patch .object (LoggerFactory , 'clear_registry' , side_effect = error_type ("Test error" )):
323322 # Should not raise an exception (silently ignored)
324323 LoggerFactory ._atexit_cleanup ()
325324
@@ -449,3 +448,47 @@ def test_factory_large_scale_operations(self):
449448 for logger in created_loggers :
450449 logger .info ("Scale test message" )
451450 assert logger .name is not None
451+
452+ def test_factory_get_memory_limits (self ):
453+ """Test get_memory_limits returns current settings."""
454+ # Set specific limits
455+ LoggerFactory .set_memory_limits (max_loggers = 75 , ttl_seconds = 2400 )
456+
457+ # Get and verify limits
458+ limits = LoggerFactory .get_memory_limits ()
459+ assert limits ['max_loggers' ] == 75
460+ assert limits ['ttl_seconds' ] == 2400
461+
462+ @pytest .mark .skipif (
463+ sys .platform == "win32" ,
464+ reason = "Windows file locking issues with TemporaryDirectory - see test_factory_windows.py" ,
465+ )
466+ def test_timed_rotating_log_context_manager (self ):
467+ """Test TimedRotatingLog context manager __enter__ and __exit__."""
468+ with tempfile .TemporaryDirectory () as temp_dir :
469+ with TimedRotatingLog (
470+ name = "context_timed_test" ,
471+ directory = temp_dir ,
472+ when = "midnight" ,
473+ level = "INFO" ,
474+ ) as logger :
475+ logger .info ("Message inside context manager" )
476+ assert logger .name == "context_timed_test"
477+ # Logger should be cleaned up after exiting context
478+
479+ def test_shutdown_logger_convenience_function (self ):
480+ """Test shutdown_logger convenience function."""
481+ from pythonLogs .core .factory import shutdown_logger
482+
483+ # Create and register a logger
484+ LoggerFactory .get_or_create_logger (LoggerType .BASIC , name = "shutdown_conv_test" )
485+ assert "shutdown_conv_test" in get_registered_loggers ()
486+
487+ # Shutdown via convenience function
488+ result = shutdown_logger ("shutdown_conv_test" )
489+ assert result is True
490+ assert "shutdown_conv_test" not in get_registered_loggers ()
491+
492+ # Try shutting down non-existent logger
493+ result = shutdown_logger ("non_existent_conv" )
494+ assert result is False
0 commit comments