mirror of
https://github.com/esphome/esphome.git
synced 2026-10-07 19:44:08 +00:00
[select] Keep select.is option lists in flash (#20108)
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
esphome:
|
||||
name: test
|
||||
|
||||
esp8266:
|
||||
board: esp01_1m
|
||||
|
||||
select:
|
||||
- platform: template
|
||||
id: mode
|
||||
optimistic: true
|
||||
options: [one, two, three]
|
||||
|
||||
button:
|
||||
- platform: template
|
||||
name: A
|
||||
on_press:
|
||||
- if:
|
||||
condition:
|
||||
select.is:
|
||||
id: mode
|
||||
options: [one, two]
|
||||
then:
|
||||
- logger.log: a
|
||||
- platform: template
|
||||
name: B
|
||||
on_press:
|
||||
- if:
|
||||
condition:
|
||||
select.is:
|
||||
id: mode
|
||||
options: [one, two]
|
||||
then:
|
||||
- logger.log: b
|
||||
- platform: template
|
||||
name: C
|
||||
on_press:
|
||||
- if:
|
||||
condition:
|
||||
select.is:
|
||||
id: mode
|
||||
options: three
|
||||
then:
|
||||
- logger.log: c
|
||||
- if:
|
||||
condition:
|
||||
select.is:
|
||||
id: mode
|
||||
lambda: return current == "two";
|
||||
then:
|
||||
- logger.log: d
|
||||
|
||||
logger:
|
||||
@@ -0,0 +1,22 @@
|
||||
"""select.is option lists live in shared PROGMEM tables."""
|
||||
|
||||
from collections.abc import Callable
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
|
||||
def test_select_is_options_use_shared_progmem_tables(
|
||||
generate_main: Callable[[str | Path], str],
|
||||
component_config_path: Callable[[str], Path],
|
||||
) -> None:
|
||||
main_cpp = generate_main(component_config_path("select_is.yaml"))
|
||||
|
||||
tables = re.findall(
|
||||
r"static constexpr const char \* (select_is_options\w*)\[\] PROGMEM = \{([^;]*)\};",
|
||||
main_cpp,
|
||||
)
|
||||
# Two conditions with [one, two] share one table; [three] gets its own
|
||||
assert sorted(body for _, body in tables) == ['"one", "two"', '"three"']
|
||||
one_two = next(name for name, body in tables if body == '"one", "two"')
|
||||
assert main_cpp.count(f", {one_two});") == 2
|
||||
assert "SelectIsCondition<0" in main_cpp
|
||||
Reference in New Issue
Block a user