132 lines
3.7 KiB
Python
132 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Tests for the logging system (pure logic, no GUI dependencies).
|
|
"""
|
|
import logging
|
|
import tempfile
|
|
import shutil
|
|
from pathlib import Path
|
|
import pytest
|
|
|
|
from mosaicode.utils.logger import get_logger
|
|
|
|
@pytest.fixture
|
|
def temp_dir():
|
|
dir_path = Path(tempfile.mkdtemp(prefix="mosaicode_test_"))
|
|
yield dir_path
|
|
if dir_path.exists():
|
|
shutil.rmtree(dir_path)
|
|
|
|
def test_get_logger():
|
|
logger = get_logger("test_module")
|
|
assert isinstance(logger, logging.Logger)
|
|
assert logger.name == "mosaicode.test_module"
|
|
|
|
def test_logger_levels():
|
|
logger = get_logger("test_levels")
|
|
# Testa todos os níveis sem levantar exceção
|
|
logger.debug("Debug message")
|
|
logger.info("Info message")
|
|
logger.warning("Warning message")
|
|
logger.error("Error message")
|
|
logger.critical("Critical message")
|
|
assert True
|
|
|
|
def test_logger_properties():
|
|
logger = get_logger("test_properties")
|
|
assert isinstance(logger.name, str)
|
|
assert logger.name == "mosaicode.test_properties"
|
|
assert isinstance(logger.level, int)
|
|
assert isinstance(logger.handlers, list)
|
|
|
|
def test_multiple_loggers():
|
|
logger1 = get_logger("module1")
|
|
logger2 = get_logger("module2")
|
|
logger3 = get_logger("module1") # Same name as logger1
|
|
|
|
# Should be different logger instances
|
|
assert logger1 != logger2
|
|
assert logger2 != logger3
|
|
|
|
# Same name should return same logger (singleton behavior)
|
|
assert logger1 == logger3
|
|
|
|
def test_logger_with_formatter():
|
|
logger = get_logger("test_formatter")
|
|
|
|
# Test that we can set a formatter
|
|
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
|
|
|
|
# Add a handler with formatter
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(formatter)
|
|
logger.addHandler(handler)
|
|
|
|
# Test logging with formatter
|
|
logger.info("Test message with formatter")
|
|
|
|
# Should complete without errors
|
|
assert True
|
|
|
|
def test_logger_level_changes():
|
|
logger = get_logger("test_level_changes")
|
|
|
|
# Test setting different levels
|
|
logger.setLevel(logging.DEBUG)
|
|
assert logger.level == logging.DEBUG
|
|
|
|
logger.setLevel(logging.INFO)
|
|
assert logger.level == logging.INFO
|
|
|
|
logger.setLevel(logging.WARNING)
|
|
assert logger.level == logging.WARNING
|
|
|
|
logger.setLevel(logging.ERROR)
|
|
assert logger.level == logging.ERROR
|
|
|
|
def test_logger_handlers():
|
|
logger = get_logger("test_handlers")
|
|
|
|
# Test adding and removing handlers
|
|
handler = logging.StreamHandler()
|
|
initial_count = len(logger.handlers)
|
|
|
|
logger.addHandler(handler)
|
|
assert len(logger.handlers) == initial_count + 1
|
|
|
|
logger.removeHandler(handler)
|
|
assert len(logger.handlers) == initial_count
|
|
|
|
def test_logger_inheritance():
|
|
parent_logger = get_logger("parent")
|
|
child_logger = get_logger("parent.child")
|
|
|
|
# Child logger should inherit from parent
|
|
assert child_logger.name.startswith(parent_logger.name)
|
|
|
|
# Both should be valid loggers
|
|
assert isinstance(parent_logger, logging.Logger)
|
|
assert isinstance(child_logger, logging.Logger)
|
|
|
|
def test_logger_with_exceptions():
|
|
logger = get_logger("test_exceptions")
|
|
|
|
# Test logging exceptions
|
|
try:
|
|
raise ValueError("Test exception")
|
|
except ValueError as e:
|
|
logger.exception("Caught exception: %s", str(e))
|
|
|
|
# Should complete without errors
|
|
assert True
|
|
|
|
def test_logger_performance():
|
|
logger = get_logger("test_performance")
|
|
|
|
# Test multiple log messages
|
|
for i in range(100):
|
|
logger.debug(f"Debug message {i}")
|
|
logger.info(f"Info message {i}")
|
|
|
|
# Should complete without errors
|
|
assert True |