diff --git a/pydmconverter/widgets.py b/pydmconverter/widgets.py index 359c88c..3d03c3c 100644 --- a/pydmconverter/widgets.py +++ b/pydmconverter/widgets.py @@ -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" diff --git a/tests/test_widgets.py b/tests/test_widgets.py index e4881b5..37253a2 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -20,6 +20,7 @@ PyDMEnumButton, PyDMDrawingLine, PyDMDrawingPolyline, + PyDMWaveformPlot, ) from pydmconverter.widgets_helpers import XMLSerializableMixin, Alarmable, Drawable, Hidable @@ -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