mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
feat: режим «Значение + статичный значок» (#588)
Пятый вариант «Отображение»: маркер показывает выбранное значение и при этом
никогда не меняет цвет — ни по состоянию, ни по тревоге, ни по недоступности,
ни под цвет RGB-света, ни по активности.
Четыре прежних режима задавали одним выбором две независимые вещи: что
нарисовано внутри маркера и красится ли он состоянием. Поэтому вместо
сравнения с одним токеном появились два производных предиката рядом с
`normalizeDeviceDisplay` — `displayWantsValue` и `displayIsNeutral`, — и их
спрашивают политика, слой пульсации, внешний бейдж, редактор и три ветки
живого слоя пылесоса.
Две ловушки, из-за которых режим не сводится к одной строке в словаре:
- быстрый путь «статичному маркеру источники не нужны» (`sourceDetails: false`)
— это основной путь рендера плана, карточки пространства и PDF. Он оставлен
только режиму без значения: иначе число пропало бы именно на плане и
осталось в предпросмотре редактора;
- три ветки живого пылесоса сравнивают режим строкой и не читают политику,
поэтому зелёная политика их не гарантирует. Свидетель держит две
конфигурации карты: сопоставленная доказывает puck и след, несопоставленная
— бейдж маршрута (при совпадающей калибровке маршрут `ready`, и бейджа не
было бы ни в одном режиме). Бейдж проверяется при наполненном буфере
позиций, иначе его отсутствие объяснялось бы первой веткой.
Потолок initial View перецентрирован 291_700 → 292_400 без изменения общего
бюджета: измеренный факт 291 346 Б оставлял под прежним центром 354 Б —
внутри шумовой полосы метрики.
Эталон: в `device-icon-state-table-{light,dark}` включённая RGB-лампа
переведена в новый режим. Кадры обязаны разойтись; приёмка — отдельным
коммитом класса D с полного линуксового артефакта Validate.
Issue: #588
User-Visible: yes
This commit is contained in:
@@ -396,6 +396,21 @@ def test_value_badge_projection_drops_malformed_scalar_fields(
|
||||
assert "sentinel" not in json.dumps(projected)
|
||||
|
||||
|
||||
def test_issue_588_display_mode_survives_the_projection() -> None:
|
||||
"""The support package carries the display mode verbatim.
|
||||
|
||||
#588 adds a fifth mode. The projection copies the field without looking at
|
||||
its value, so nothing had to change here — but a diagnostic package that
|
||||
silently dropped the mode would describe a plan the user does not see, and
|
||||
that is exactly the class of report that costs a day of guessing.
|
||||
"""
|
||||
projected = support_package._project_marker(
|
||||
support_package._Pseudonyms("display"),
|
||||
{"id": "marker", "binding": "virtual", "display": "value_static_icon"},
|
||||
)
|
||||
assert projected["display"] == "value_static_icon"
|
||||
|
||||
|
||||
def test_value_badge_projection_omits_empty_result():
|
||||
projected = support_package._project_marker(
|
||||
support_package._Pseudonyms("badge"),
|
||||
|
||||
Reference in New Issue
Block a user