mirror of
https://github.com/esphome/esphome.git
synced 2026-11-10 23:25:58 +00:00
71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
"""Tests for the esp32_camera capture_delay option and capture triggers."""
|
|
|
|
from collections.abc import Callable
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from esphome.core import CORE
|
|
|
|
BASE = """
|
|
esphome:
|
|
name: test
|
|
esp32:
|
|
board: esp32cam
|
|
logger:
|
|
psram:
|
|
i2c:
|
|
id: camera_bus
|
|
sda: 26
|
|
scl: 27
|
|
esp32_camera:
|
|
id: cam
|
|
name: Camera
|
|
data_pins: [5, 18, 19, 21, 36, 39, 34, 35]
|
|
vsync_pin: 25
|
|
href_pin: 23
|
|
pixel_clock_pin: 22
|
|
external_clock:
|
|
pin: 0
|
|
frequency: 20MHz
|
|
i2c_id: camera_bus
|
|
power_down_pin: 32
|
|
"""
|
|
|
|
START = " on_capture_start:\n - logger.log: start\n"
|
|
END = " on_capture_end:\n - logger.log: end\n"
|
|
FORWARDERS = ("TriggerOnTrueForwarder", "TriggerOnFalseForwarder")
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("options", "delay", "forwarders"),
|
|
[
|
|
("", None, ()),
|
|
(" capture_delay: 2s\n", 2000, ()),
|
|
(START, 0, ("TriggerOnTrueForwarder",)),
|
|
(END, 0, ("TriggerOnFalseForwarder",)),
|
|
(" capture_delay: 500ms\n" + START + END, 500, FORWARDERS),
|
|
],
|
|
)
|
|
def test_capture_codegen(
|
|
generate_main: Callable[[str | Path], str],
|
|
tmp_path: Path,
|
|
options: str,
|
|
delay: int | None,
|
|
forwarders: tuple[str, ...],
|
|
) -> None:
|
|
path = tmp_path / "test.yaml"
|
|
path.write_text(BASE + options)
|
|
main_cpp = generate_main(path)
|
|
|
|
if delay is None:
|
|
assert "set_capture_delay" not in main_cpp
|
|
else:
|
|
assert f"cam->set_capture_delay({delay});" in main_cpp
|
|
for forwarder in FORWARDERS:
|
|
expected = int(forwarder in forwarders)
|
|
assert main_cpp.count(f"cam->add_on_capture_callback({forwarder}") == expected
|
|
assert ("USE_ESP32_CAMERA_CAPTURE" in {d.name for d in CORE.defines}) == (
|
|
delay is not None
|
|
)
|