mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-25 13:13:48 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			136 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Unit tests for esphome.config_helpers module."""
 | |
| 
 | |
| from collections.abc import Callable
 | |
| from unittest.mock import patch
 | |
| 
 | |
| from esphome.config_helpers import filter_source_files_from_platform, get_logger_level
 | |
| from esphome.const import (
 | |
|     CONF_LEVEL,
 | |
|     CONF_LOGGER,
 | |
|     KEY_CORE,
 | |
|     KEY_TARGET_FRAMEWORK,
 | |
|     KEY_TARGET_PLATFORM,
 | |
|     PlatformFramework,
 | |
| )
 | |
| 
 | |
| 
 | |
| def test_filter_source_files_from_platform_esp32() -> None:
 | |
|     """Test that filter_source_files_from_platform correctly filters files for ESP32 platform."""
 | |
|     # Define test file mappings
 | |
|     files_map: dict[str, set[PlatformFramework]] = {
 | |
|         "logger_esp32.cpp": {
 | |
|             PlatformFramework.ESP32_ARDUINO,
 | |
|             PlatformFramework.ESP32_IDF,
 | |
|         },
 | |
|         "logger_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
 | |
|         "logger_host.cpp": {PlatformFramework.HOST_NATIVE},
 | |
|         "logger_common.cpp": {
 | |
|             PlatformFramework.ESP32_ARDUINO,
 | |
|             PlatformFramework.ESP32_IDF,
 | |
|             PlatformFramework.ESP8266_ARDUINO,
 | |
|             PlatformFramework.HOST_NATIVE,
 | |
|         },
 | |
|     }
 | |
| 
 | |
|     # Create the filter function
 | |
|     filter_func: Callable[[], list[str]] = filter_source_files_from_platform(files_map)
 | |
| 
 | |
|     # Test ESP32 with Arduino framework
 | |
|     mock_core_data: dict[str, dict[str, str]] = {
 | |
|         KEY_CORE: {
 | |
|             KEY_TARGET_PLATFORM: "esp32",
 | |
|             KEY_TARGET_FRAMEWORK: "arduino",
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     with patch("esphome.config_helpers.CORE.data", mock_core_data):
 | |
|         excluded: list[str] = filter_func()
 | |
|         # ESP32 Arduino should exclude ESP8266 and HOST files
 | |
|         assert "logger_esp8266.cpp" in excluded
 | |
|         assert "logger_host.cpp" in excluded
 | |
|         # But not ESP32 or common files
 | |
|         assert "logger_esp32.cpp" not in excluded
 | |
|         assert "logger_common.cpp" not in excluded
 | |
| 
 | |
| 
 | |
| def test_filter_source_files_from_platform_host() -> None:
 | |
|     """Test that filter_source_files_from_platform correctly filters files for HOST platform."""
 | |
|     # Define test file mappings
 | |
|     files_map: dict[str, set[PlatformFramework]] = {
 | |
|         "logger_esp32.cpp": {
 | |
|             PlatformFramework.ESP32_ARDUINO,
 | |
|             PlatformFramework.ESP32_IDF,
 | |
|         },
 | |
|         "logger_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
 | |
|         "logger_host.cpp": {PlatformFramework.HOST_NATIVE},
 | |
|         "logger_common.cpp": {
 | |
|             PlatformFramework.ESP32_ARDUINO,
 | |
|             PlatformFramework.ESP32_IDF,
 | |
|             PlatformFramework.ESP8266_ARDUINO,
 | |
|             PlatformFramework.HOST_NATIVE,
 | |
|         },
 | |
|     }
 | |
| 
 | |
|     # Create the filter function
 | |
|     filter_func: Callable[[], list[str]] = filter_source_files_from_platform(files_map)
 | |
| 
 | |
|     # Test Host platform
 | |
|     mock_core_data: dict[str, dict[str, str]] = {
 | |
|         KEY_CORE: {
 | |
|             KEY_TARGET_PLATFORM: "host",
 | |
|             KEY_TARGET_FRAMEWORK: "host",  # Framework.NATIVE is "host"
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     with patch("esphome.config_helpers.CORE.data", mock_core_data):
 | |
|         excluded: list[str] = filter_func()
 | |
|         # Host should exclude ESP32 and ESP8266 files
 | |
|         assert "logger_esp32.cpp" in excluded
 | |
|         assert "logger_esp8266.cpp" in excluded
 | |
|         # But not host or common files
 | |
|         assert "logger_host.cpp" not in excluded
 | |
|         assert "logger_common.cpp" not in excluded
 | |
| 
 | |
| 
 | |
| def test_filter_source_files_from_platform_handles_missing_data() -> None:
 | |
|     """Test that filter_source_files_from_platform returns empty list when platform/framework data is missing."""
 | |
|     # Define test file mappings
 | |
|     files_map: dict[str, set[PlatformFramework]] = {
 | |
|         "logger_esp32.cpp": {PlatformFramework.ESP32_ARDUINO},
 | |
|         "logger_host.cpp": {PlatformFramework.HOST_NATIVE},
 | |
|     }
 | |
| 
 | |
|     # Create the filter function
 | |
|     filter_func: Callable[[], list[str]] = filter_source_files_from_platform(files_map)
 | |
| 
 | |
|     # Test case: Missing platform/framework data
 | |
|     mock_core_data: dict[str, dict[str, str]] = {KEY_CORE: {}}
 | |
| 
 | |
|     with patch("esphome.config_helpers.CORE.data", mock_core_data):
 | |
|         excluded: list[str] = filter_func()
 | |
|         # Should return empty list when platform/framework not set
 | |
|         assert excluded == []
 | |
| 
 | |
| 
 | |
| def test_get_logger_level() -> None:
 | |
|     """Test get_logger_level helper function."""
 | |
|     # Test no logger config - should return default DEBUG
 | |
|     mock_config = {}
 | |
|     with patch("esphome.config_helpers.CORE.config", mock_config):
 | |
|         assert get_logger_level() == "DEBUG"
 | |
| 
 | |
|     # Test with logger set to INFO
 | |
|     mock_config = {CONF_LOGGER: {CONF_LEVEL: "INFO"}}
 | |
|     with patch("esphome.config_helpers.CORE.config", mock_config):
 | |
|         assert get_logger_level() == "INFO"
 | |
| 
 | |
|     # Test with VERY_VERBOSE
 | |
|     mock_config = {CONF_LOGGER: {CONF_LEVEL: "VERY_VERBOSE"}}
 | |
|     with patch("esphome.config_helpers.CORE.config", mock_config):
 | |
|         assert get_logger_level() == "VERY_VERBOSE"
 | |
| 
 | |
|     # Test with logger missing level (uses default DEBUG)
 | |
|     mock_config = {CONF_LOGGER: {}}
 | |
|     with patch("esphome.config_helpers.CORE.config", mock_config):
 | |
|         assert get_logger_level() == "DEBUG"
 |