step 5: complete first gauge catalogue
This commit is contained in:
91
tests/test_step5_catalogue.py
Normal file
91
tests/test_step5_catalogue.py
Normal file
@@ -0,0 +1,91 @@
|
||||
# pyright: reportGeneralTypeIssues=false
|
||||
|
||||
from collections.abc import Generator
|
||||
|
||||
import dearpygui.dearpygui as dpg
|
||||
import pytest
|
||||
|
||||
import dpg_gauges as dpgg
|
||||
from dpg_gauges.scales import active_segments, compass_heading, generate_ticks, value_to_angle
|
||||
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_value_to_angle_ticks_and_compass_wrap() -> None:
|
||||
assert value_to_angle(50, 0, 100, 225, -45) == 90
|
||||
assert generate_ticks(0, 100, 3) == [0, 50, 100]
|
||||
assert compass_heading(370) == 10
|
||||
assert compass_heading(-10) == 350
|
||||
|
||||
|
||||
def test_analog_renders_needle_redline_and_marker(dpg_context: None) -> None:
|
||||
marker = dpgg.GaugeMarker(6000, (255, 255, 255, 255))
|
||||
with dpg.window(label="Analog"):
|
||||
dpgg.analog_gauge(
|
||||
tag="rpm",
|
||||
label="RPM",
|
||||
value=3500,
|
||||
max_value=8000,
|
||||
redline_start=6500,
|
||||
markers=[marker],
|
||||
width=240,
|
||||
height=200,
|
||||
)
|
||||
|
||||
debug = dpgg.get_gauge_debug_state("rpm")
|
||||
assert "rpm__needle" in debug["renderer"]["layers"]["dynamic"]
|
||||
assert "rpm__marker_0" in debug["renderer"]["layers"]["markers"]
|
||||
assert get_gauge_state("rpm").measured_width == 240
|
||||
|
||||
|
||||
def test_compass_wraps_runtime_heading(dpg_context: None) -> None:
|
||||
with dpg.window(label="Compass"):
|
||||
dpgg.compass_gauge(tag="heading", value=370, width=200, height=200)
|
||||
|
||||
state = get_gauge_state("heading")
|
||||
assert state.clamped_value == 10
|
||||
assert (
|
||||
"heading__needle" in dpgg.get_gauge_debug_state("heading")["renderer"]["layers"]["dynamic"]
|
||||
)
|
||||
|
||||
|
||||
def test_segmented_activation_and_rendering(dpg_context: None) -> None:
|
||||
assert active_segments(55, 0, 100, 10) == 6
|
||||
with dpg.window(label="Segments"):
|
||||
dpgg.segmented_gauge(tag="shift", value=55, segments=10, width=260, height=80)
|
||||
|
||||
dynamic = dpgg.get_gauge_debug_state("shift")["renderer"]["layers"]["dynamic"]
|
||||
assert "shift__segment_0" in dynamic
|
||||
assert "shift__segment_9" in dynamic
|
||||
|
||||
|
||||
def test_battery_clamps_and_multi_value_renders(dpg_context: None) -> None:
|
||||
with dpg.window(label="Catalogue"):
|
||||
dpgg.battery_gauge(tag="battery", value=125, width=220, height=100)
|
||||
dpgg.multi_value_gauge(
|
||||
tag="engine",
|
||||
label="Engine",
|
||||
values={"AFR": 12.8, "Oil": "58 psi"},
|
||||
width=220,
|
||||
height=110,
|
||||
)
|
||||
|
||||
assert get_gauge_state("battery").clamped_value == 100
|
||||
assert (
|
||||
"battery__battery_fill"
|
||||
in dpgg.get_gauge_debug_state("battery")["renderer"]["layers"]["dynamic"]
|
||||
)
|
||||
text = dpgg.get_gauge_debug_state("engine")["renderer"]["layers"]["text"]
|
||||
assert "engine__multi_0" in text
|
||||
assert "engine__multi_1" in text
|
||||
Reference in New Issue
Block a user