step 3: add widget shell and renderer foundation
This commit is contained in:
78
tests/test_step3_widget_renderer.py
Normal file
78
tests/test_step3_widget_renderer.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# pyright: reportGeneralTypeIssues=false
|
||||
|
||||
from collections.abc import Generator
|
||||
|
||||
import dearpygui.dearpygui as dpg
|
||||
import pytest
|
||||
|
||||
import dpg_gauges as dpgg
|
||||
from dpg_gauges.state import clear_registry, get_gauge_state
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def dpg_context() -> Generator[None]:
|
||||
clear_registry()
|
||||
dpgg.configure()
|
||||
dpg.create_context()
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
clear_registry()
|
||||
dpg.destroy_context()
|
||||
|
||||
|
||||
def test_dpg_gauge_shell_registers_before_yield(dpg_context: None) -> None:
|
||||
with (
|
||||
dpg.window(label="Smoke"),
|
||||
dpgg.digital_gauge(tag="speed", label="Speed", value=42, width=180, height=80) as config,
|
||||
):
|
||||
state = get_gauge_state("speed")
|
||||
assert config.tag == "speed"
|
||||
assert state.renderer is not None
|
||||
assert dpg.does_item_exist(state.container_tag)
|
||||
assert state.drawlist_tag is not None
|
||||
assert dpg.does_item_exist(state.drawlist_tag)
|
||||
|
||||
|
||||
def test_runtime_update_redraws_attached_gauge(dpg_context: None) -> None:
|
||||
with dpg.window(label="Smoke"):
|
||||
dpgg.digital_gauge(tag="rpm", label="RPM", value=1000, max_value=8000, width=200, height=90)
|
||||
|
||||
dpgg.set_value("rpm", 2500)
|
||||
|
||||
state = get_gauge_state("rpm")
|
||||
debug = dpgg.get_gauge_debug_state("rpm")
|
||||
assert state.displayed_value == 2500
|
||||
assert state.dirty == 0
|
||||
assert debug["renderer"]["drawlist_tag"] == "rpm__drawlist"
|
||||
assert "rpm__value" in debug["renderer"]["layers"]["dynamic"]
|
||||
|
||||
|
||||
def test_hidden_gauge_preserves_configured_size(dpg_context: None) -> None:
|
||||
with dpg.window(label="Hidden"):
|
||||
dpgg.digital_gauge(tag="hidden", value=1, width=160, height=70, show=False)
|
||||
|
||||
state = get_gauge_state("hidden")
|
||||
assert state.measured_width == 160
|
||||
assert state.measured_height == 70
|
||||
assert state.last_nonzero_width == 160
|
||||
assert state.last_nonzero_height == 70
|
||||
|
||||
dpgg.set_show("hidden", True)
|
||||
assert dpg.does_item_exist(state.container_tag)
|
||||
assert state.config.show is True
|
||||
|
||||
|
||||
def test_panel_and_grid_are_lightweight_containers(dpg_context: None) -> None:
|
||||
with (
|
||||
dpg.window(label="Dashboard"),
|
||||
dpgg.gauge_panel(tag="engine", label="Engine", width=300, height=180) as panel,
|
||||
dpgg.gauge_grid(tag="engine_grid", columns=2) as grid,
|
||||
):
|
||||
assert panel == "engine"
|
||||
assert grid == "engine_grid"
|
||||
dpgg.digital_gauge(tag="temp", label="Temp", value=90, width=120, height=60)
|
||||
|
||||
assert dpg.does_item_exist("engine")
|
||||
assert dpg.does_item_exist("engine_grid")
|
||||
assert get_gauge_state("temp").renderer is not None
|
||||
Reference in New Issue
Block a user