You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

172 lines
6.2 KiB

import unittest
from unittest.mock import patch, MagicMock, call
import logging
from termcolor import colored
from deepsearcher.utils import log
from deepsearcher.utils.log import ColoredFormatter
class TestColoredFormatter(unittest.TestCase):
"""Tests for the ColoredFormatter class."""
def setUp(self):
"""Set up test fixtures."""
self.formatter = ColoredFormatter("%(levelname)s - %(message)s")
def test_format_debug(self):
"""Test formatting debug level messages."""
record = logging.LogRecord(
"test", logging.DEBUG, "test.py", 1, "Debug message", (), None
)
formatted = self.formatter.format(record)
expected = colored("DEBUG - Debug message", "cyan")
self.assertEqual(formatted, expected)
def test_format_info(self):
"""Test formatting info level messages."""
record = logging.LogRecord(
"test", logging.INFO, "test.py", 1, "Info message", (), None
)
formatted = self.formatter.format(record)
expected = colored("INFO - Info message", "green")
self.assertEqual(formatted, expected)
def test_format_warning(self):
"""Test formatting warning level messages."""
record = logging.LogRecord(
"test", logging.WARNING, "test.py", 1, "Warning message", (), None
)
formatted = self.formatter.format(record)
expected = colored("WARNING - Warning message", "yellow")
self.assertEqual(formatted, expected)
def test_format_error(self):
"""Test formatting error level messages."""
record = logging.LogRecord(
"test", logging.ERROR, "test.py", 1, "Error message", (), None
)
formatted = self.formatter.format(record)
expected = colored("ERROR - Error message", "red")
self.assertEqual(formatted, expected)
def test_format_critical(self):
"""Test formatting critical level messages."""
record = logging.LogRecord(
"test", logging.CRITICAL, "test.py", 1, "Critical message", (), None
)
formatted = self.formatter.format(record)
expected = colored("CRITICAL - Critical message", "magenta")
self.assertEqual(formatted, expected)
def test_format_unknown_level(self):
"""Test formatting messages with unknown log level."""
record = logging.LogRecord(
"test", 60, "test.py", 1, "Custom level message", (), None
)
record.levelname = "CUSTOM"
formatted = self.formatter.format(record)
expected = colored("CUSTOM - Custom level message", "white")
self.assertEqual(formatted, expected)
class TestLogFunctions(unittest.TestCase):
"""Tests for the logging functions."""
def setUp(self):
"""Set up test fixtures."""
# Reset dev mode before each test
log.set_dev_mode(False)
# Create mock for dev_logger
self.mock_dev_logger = MagicMock()
self.dev_logger_patcher = patch("deepsearcher.utils.log.dev_logger", self.mock_dev_logger)
self.dev_logger_patcher.start()
# Create mock for progress_logger
self.mock_progress_logger = MagicMock()
self.progress_logger_patcher = patch("deepsearcher.utils.log.progress_logger", self.mock_progress_logger)
self.progress_logger_patcher.start()
def tearDown(self):
"""Clean up test fixtures."""
self.dev_logger_patcher.stop()
self.progress_logger_patcher.stop()
def test_set_dev_mode(self):
"""Test setting development mode."""
self.assertFalse(log.dev_mode)
log.set_dev_mode(True)
self.assertTrue(log.dev_mode)
log.set_dev_mode(False)
self.assertFalse(log.dev_mode)
def test_set_level(self):
"""Test setting log level."""
log.set_level(logging.DEBUG)
self.mock_dev_logger.setLevel.assert_called_once_with(logging.DEBUG)
def test_debug_in_dev_mode(self):
"""Test debug logging in dev mode."""
log.set_dev_mode(True)
log.debug("Test debug")
self.mock_dev_logger.debug.assert_called_once_with("Test debug")
def test_debug_not_in_dev_mode(self):
"""Test debug logging not in dev mode."""
log.set_dev_mode(False)
log.debug("Test debug")
self.mock_dev_logger.debug.assert_not_called()
def test_info_in_dev_mode(self):
"""Test info logging in dev mode."""
log.set_dev_mode(True)
log.info("Test info")
self.mock_dev_logger.info.assert_called_once_with("Test info")
def test_info_not_in_dev_mode(self):
"""Test info logging not in dev mode."""
log.set_dev_mode(False)
log.info("Test info")
self.mock_dev_logger.info.assert_not_called()
def test_warning_in_dev_mode(self):
"""Test warning logging in dev mode."""
log.set_dev_mode(True)
log.warning("Test warning")
self.mock_dev_logger.warning.assert_called_once_with("Test warning")
def test_warning_not_in_dev_mode(self):
"""Test warning logging not in dev mode."""
log.set_dev_mode(False)
log.warning("Test warning")
self.mock_dev_logger.warning.assert_not_called()
def test_error_in_dev_mode(self):
"""Test error logging in dev mode."""
log.set_dev_mode(True)
log.error("Test error")
self.mock_dev_logger.error.assert_called_once_with("Test error")
def test_error_not_in_dev_mode(self):
"""Test error logging not in dev mode."""
log.set_dev_mode(False)
log.error("Test error")
self.mock_dev_logger.error.assert_not_called()
def test_critical(self):
"""Test critical logging and exception raising."""
with self.assertRaises(RuntimeError) as context:
log.critical("Test critical")
self.mock_dev_logger.critical.assert_called_once_with("Test critical")
self.assertEqual(str(context.exception), "Test critical")
def test_color_print(self):
"""Test color print function."""
log.color_print("Test message")
self.mock_progress_logger.info.assert_called_once_with("Test message")
if __name__ == "__main__":
unittest.main()