mirror of
https://github.com/esphome/esphome.git
synced 2026-10-18 04:02:54 +00:00
[core] Add LineReader to collect lines in a fixed buffer (#20952)
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user