Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pydmconverter/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -1582,7 +1582,7 @@ def generate_properties(self) -> List[ET.Element]:
properties.append(Double("maxXRange", self.maxXRange).to_xml())
if self.maxYRange is not None:
properties.append(Double("maxYRange", self.maxYRange).to_xml())
if self.yAxisSrc is not None and self.yAxisSrc == "fromUser":
if self.maxYRange is not None and self.yAxisSrc != "AutoScale":
self.auto_range = "false"
else:
self.auto_range = "true"
Expand Down
47 changes: 47 additions & 0 deletions tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
PyDMEnumButton,
PyDMDrawingLine,
PyDMDrawingPolyline,
PyDMWaveformPlot,
)

from pydmconverter.widgets_helpers import XMLSerializableMixin, Alarmable, Drawable, Hidable
Expand Down Expand Up @@ -548,3 +549,49 @@ def test_pydmdrawingpolyline_generate_properties():
assert prop_dict.get("flipMidPointArrow") == "true"

assert prop_dict.get("points") == ["0, 0", "10, 10", "20, 20"]


# --- Tests for PyDMWaveformPlot ---


def test_waveformplot_explicit_limits_disables_autorange():
"""When yMin/yMax are set, auto_range should be false."""
widget = PyDMWaveformPlot(
minYRange=0,
maxYRange=400,
yLabel="Voltage",
)
properties = widget.generate_properties()
yaxes_prop = next((p for p in properties if p.get("name") == "yAxes"), None)
assert yaxes_prop is not None
stringlist = yaxes_prop.find("stringlist")
yaxis_str = stringlist.find("string").text
assert '"autoRange": false' in yaxis_str
assert '"minRange": 0' in yaxis_str
assert '"maxRange": 400' in yaxis_str


def test_waveformplot_autoscale_src_enables_autorange():
"""When yAxisSrc is AutoScale, auto_range should be true."""
widget = PyDMWaveformPlot(
minYRange=0,
maxYRange=400,
yLabel="Voltage",
yAxisSrc="AutoScale",
)
properties = widget.generate_properties()
yaxes_prop = next((p for p in properties if p.get("name") == "yAxes"), None)
assert yaxes_prop is not None
stringlist = yaxes_prop.find("stringlist")
yaxis_str = stringlist.find("string").text
assert '"autoRange": true' in yaxis_str


def test_waveformplot_no_limits_enables_autorange():
"""When no limits are set, auto_range should default to true."""
widget = PyDMWaveformPlot(yLabel="Voltage")
# maxYRange is None by default, so no yAxes generated
# (yLabel condition requires maxYRange to be not None)
properties = widget.generate_properties()
yaxes_prop = next((p for p in properties if p.get("name") == "yAxes"), None)
assert yaxes_prop is None
Loading