From f6e4c0cb521392247b858ca81a37fd001a5219e3 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 28 Oct 2025 22:22:28 -0500 Subject: [PATCH] [ci] Fix component tests not running when only test files change (#11580) --- script/helpers.py | 16 +++++++++------- tests/script/test_helpers.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/script/helpers.py b/script/helpers.py index 78c11b427e..447d54fa54 100644 --- a/script/helpers.py +++ b/script/helpers.py @@ -90,16 +90,18 @@ def get_component_from_path(file_path: str) -> str | None: """Extract component name from a file path. Args: - file_path: Path to a file (e.g., "esphome/components/wifi/wifi.cpp") + file_path: Path to a file (e.g., "esphome/components/wifi/wifi.cpp" + or "tests/components/uart/test.esp32-idf.yaml") Returns: - Component name if path is in components directory, None otherwise + Component name if path is in components or tests directory, None otherwise """ - if not file_path.startswith(ESPHOME_COMPONENTS_PATH): - return None - parts = file_path.split("/") - if len(parts) >= 3: - return parts[2] + if file_path.startswith(ESPHOME_COMPONENTS_PATH) or file_path.startswith( + ESPHOME_TESTS_COMPONENTS_PATH + ): + parts = file_path.split("/") + if len(parts) >= 3 and parts[2]: + return parts[2] return None diff --git a/tests/script/test_helpers.py b/tests/script/test_helpers.py index 63f1f0e600..1046512a14 100644 --- a/tests/script/test_helpers.py +++ b/tests/script/test_helpers.py @@ -1065,3 +1065,39 @@ def test_parse_list_components_output(output: str, expected: list[str]) -> None: """Test parse_list_components_output function.""" result = helpers.parse_list_components_output(output) assert result == expected + + +@pytest.mark.parametrize( + ("file_path", "expected_component"), + [ + # Component files + ("esphome/components/wifi/wifi.cpp", "wifi"), + ("esphome/components/uart/uart.h", "uart"), + ("esphome/components/api/api_server.cpp", "api"), + ("esphome/components/sensor/sensor.cpp", "sensor"), + # Test files + ("tests/components/uart/test.esp32-idf.yaml", "uart"), + ("tests/components/wifi/test.esp8266-ard.yaml", "wifi"), + ("tests/components/sensor/test.esp32-idf.yaml", "sensor"), + ("tests/components/api/test_api.cpp", "api"), + ("tests/components/uart/common.h", "uart"), + # Non-component files + ("esphome/core/component.cpp", None), + ("esphome/core/helpers.h", None), + ("tests/integration/test_api.py", None), + ("tests/unit_tests/test_helpers.py", None), + ("README.md", None), + ("script/helpers.py", None), + # Edge cases + ("esphome/components/", None), # No component name + ("tests/components/", None), # No component name + ("esphome/components", None), # No trailing slash + ("tests/components", None), # No trailing slash + ], +) +def test_get_component_from_path( + file_path: str, expected_component: str | None +) -> None: + """Test extraction of component names from file paths.""" + result = helpers.get_component_from_path(file_path) + assert result == expected_component