# 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