[core] Combine entity register + configure_entity_ into one call (#16030)

This commit is contained in:
J. Nick Koston
2026-04-26 22:03:39 -05:00
committed by GitHub
parent 112646a9c4
commit 79b741b8dc
30 changed files with 145 additions and 48 deletions

View File

@@ -31,7 +31,7 @@ def test_binary_sensor_sets_mandatory_fields(generate_main):
)
# Then
assert 'bs_1->configure_entity_("test bs1",' in main_cpp
assert 'App.register_binary_sensor(bs_1, "test bs1",' in main_cpp
assert "bs_1->set_pin(" in main_cpp

View File

@@ -29,7 +29,7 @@ def test_button_sets_mandatory_fields(generate_main):
main_cpp = generate_main("tests/component_tests/button/test_button.yaml")
# Then
assert 'wol_1->configure_entity_("wol_test_1",' in main_cpp
assert 'App.register_button(wol_1, "wol_test_1",' in main_cpp
assert "wol_2->set_macaddr(18, 52, 86, 120, 144, 171);" in main_cpp

View File

@@ -8,12 +8,22 @@ INTERNAL_BIT = 1 << 24
def extract_packed_value(main_cpp: str, var_name: str) -> int:
"""Extract the third (packed) argument from a configure_entity_ call."""
pattern = (
rf"{re.escape(var_name)}->configure_entity_\("
"""Extract the packed-fields argument from the entity's configure call.
Matches both legacy form ``var->configure_entity_(name, hash, packed)`` and the
combined form ``App.register_<entity>(var, name, hash, packed)``.
"""
escaped_var = re.escape(var_name)
legacy_pattern = (
rf"{escaped_var}->configure_entity_\("
r'"(?:\\.|[^"\\])*"'
r",\s*\w+,\s*(\d+)\)"
)
match = re.search(pattern, main_cpp)
assert match, f"configure_entity_ call not found for {var_name}"
combined_pattern = (
rf"App\.register_\w+\(\s*{escaped_var}\s*,\s*"
r'"(?:\\.|[^"\\])*"'
r",\s*\w+,\s*(\d+)\)"
)
match = re.search(combined_pattern, main_cpp) or re.search(legacy_pattern, main_cpp)
assert match, f"configure call not found for {var_name}"
return int(match.group(1))

View File

@@ -28,7 +28,7 @@ def test_text_sets_mandatory_fields(generate_main):
main_cpp = generate_main("tests/component_tests/text/test_text.yaml")
# Then
assert 'it_1->configure_entity_("test 1 text",' in main_cpp
assert 'App.register_text(it_1, "test 1 text",' in main_cpp
def test_text_config_value_internal_set(generate_main):

View File

@@ -28,9 +28,9 @@ def test_text_sensor_sets_mandatory_fields(generate_main):
main_cpp = generate_main("tests/component_tests/text_sensor/test_text_sensor.yaml")
# Then
assert 'ts_1->configure_entity_("Template Text Sensor 1",' in main_cpp
assert 'ts_2->configure_entity_("Template Text Sensor 2",' in main_cpp
assert 'ts_3->configure_entity_("Template Text Sensor 3",' in main_cpp
assert 'App.register_text_sensor(ts_1, "Template Text Sensor 1",' in main_cpp
assert 'App.register_text_sensor(ts_2, "Template Text Sensor 2",' in main_cpp
assert 'App.register_text_sensor(ts_3, "Template Text Sensor 3",' in main_cpp
def test_text_sensor_config_value_internal_set(generate_main):