[core] Add LineReader to collect lines in a fixed buffer (#20952)

This commit is contained in:
J. Nick Koston
2026-10-16 19:54:11 -10:00
committed by GitHub
parent 6d664d3fef
commit 375900bfcd
11 changed files with 394 additions and 12 deletions
+72 -1
View File
@@ -12,7 +12,7 @@ sys.path.insert(0, str((Path(__file__).parent / ".." / ".." / "script").resolve(
import build_helpers # noqa: E402
from esphome.loader import ComponentManifest # noqa: E402
from esphome.loader import ComponentManifest, FileResource # noqa: E402
from tests.testing_helpers import ComponentManifestOverride # noqa: E402
# ---------------------------------------------------------------------------
@@ -241,6 +241,77 @@ def test_load_wraps_top_level_component(tmp_path: Path) -> None:
assert installed.to_code is None
def test_load_core_overrides_esphome_manifest(tmp_path: Path) -> None:
"""tests/components/core/__init__.py overrides the "esphome" core manifest."""
core_dir = tmp_path / "core"
core_dir.mkdir()
(core_dir / "__init__.py").write_text(
textwrap.dedent("""\
def override_manifest(manifest):
manifest.dependencies = ["injected"]
""")
)
inner = _make_component_manifest()
with (
patch("build_helpers.get_component", return_value=inner) as mock_get,
patch("build_helpers.set_testing_manifest") as mock_set,
):
build_helpers.load_test_manifest_overrides(["core"], tmp_path)
mock_get.assert_called_once_with("esphome")
key, installed = mock_set.call_args[0]
assert key == "esphome"
assert installed.dependencies == ["injected"]
def test_load_core_and_esphome_share_one_wrapper(tmp_path: Path) -> None:
"""Both test dirs override the "esphome" manifest; both overrides apply to one wrapper."""
for name, dep in (("core", "from_core"), ("esphome", "from_esphome")):
(tmp_path / name).mkdir()
(tmp_path / name / "__init__.py").write_text(
textwrap.dedent(f"""\
def override_manifest(manifest):
manifest.dependencies = manifest.dependencies + ["{dep}"]
""")
)
inner = _make_component_manifest()
with (
patch("build_helpers.get_component", return_value=inner),
patch("build_helpers.set_testing_manifest") as mock_set,
):
build_helpers.load_test_manifest_overrides(["core", "esphome"], tmp_path)
mock_set.assert_called_once()
installed: ComponentManifestOverride = mock_set.call_args[0][1]
assert installed.dependencies == ["from_core", "from_esphome"]
def test_enable_codegen_keeps_custom_to_code() -> None:
"""enable_codegen() lifts the suppression but keeps a to_code another override set."""
async def custom_to_code(config):
pass
override = ComponentManifestOverride(_make_component_manifest())
override.to_code = custom_to_code
override.enable_codegen()
assert override.to_code is custom_to_code
def test_add_resources_reads_component_resources_lazily() -> None:
"""add_resources() appends to the resources computed at read time."""
inner = MagicMock()
inner.resources = [FileResource("pkg", "a.cpp")]
override = ComponentManifestOverride(inner)
override.add_resources(FileResource("pkg", "extra.c"))
inner.resources = [FileResource("pkg", "a.cpp"), FileResource("pkg", "b.cpp")]
assert [r.resource for r in override.resources] == ["a.cpp", "b.cpp", "extra.c"]
override.restore()
assert [r.resource for r in override.resources] == ["a.cpp", "b.cpp"]
def test_load_wraps_platform_component(tmp_path: Path) -> None:
inner = _make_component_manifest()