1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-30 14:43:51 +00:00

[ci] Fix component tests not running when only test files change (#11580)

This commit is contained in:
J. Nick Koston
2025-10-28 22:22:28 -05:00
committed by GitHub
parent f3634edc22
commit f6e4c0cb52
2 changed files with 45 additions and 7 deletions

View File

@@ -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

View File

@@ -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