mirror of
https://github.com/esphome/esphome.git
synced 2026-10-02 17:30:22 +00:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""Regression test: a widget's theme style must be attached regardless of
|
|
which LVGL instance declares theme: and which instance's widgets are built
|
|
first.
|
|
|
|
theme_to_code() runs once per LVGL instance, interleaved with that instance's
|
|
own add_widgets(). A widget built by an earlier instance, before any instance
|
|
has declared theming for its type, must still pick up a later instance's
|
|
theme: declaration for that type - including on the later instance's own
|
|
widgets, which get_widget_theme_styles()'s memoisation can poison too.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from esphome.__main__ import generate_cpp_contents
|
|
from esphome.config import read_config
|
|
from esphome.core import CORE
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def main_cpp(request: pytest.FixtureRequest) -> str:
|
|
config_path = (
|
|
Path(request.fspath).parent / "config" / "multi_instance_theme_test.yaml"
|
|
)
|
|
original_path = CORE.config_path
|
|
try:
|
|
CORE.config_path = config_path
|
|
CORE.config = read_config({})
|
|
generate_cpp_contents(CORE.config)
|
|
return CORE.cpp_main_section
|
|
finally:
|
|
CORE.config_path = original_path
|
|
CORE.reset()
|
|
|
|
|
|
def test_earlier_instance_widget_is_themed(main_cpp: str) -> None:
|
|
assert "lv_obj_add_style(label_0, _lv_theme_style_label_main_default," in main_cpp
|
|
|
|
|
|
def test_later_instance_widget_is_themed(main_cpp: str) -> None:
|
|
assert "lv_obj_add_style(label_1, _lv_theme_style_label_main_default," in main_cpp
|