From f4e892d79768a6c4da8acf42da954a8f2e611f4b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 3 Apr 2025 17:09:35 +0200 Subject: [PATCH] tst_QAbstractSlider: add a check for sliderChange() "emission" QAbstractSlider::sliderChange() is not a signal, but a protected function, carrying an enum (also protected) to inform subclasses about changes in the base class. A user reported (QTBUG-135597) that in 5.15 the function was not called for SliderOrientationChange. Add a test that verfies that the function is a) called for all other enum values and b) add XFAILs for the (still) missing SliderOrientationChange. Amends the start of the public history. Pick-to: 6.9 6.8 6.5 5.15 Task-number: QTBUG-135597 Change-Id: I959077f030976937dd279897748025afa06e74dd Reviewed-by: Volker Hilsheimer --- .../qabstractslider/tst_qabstractslider.cpp | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp b/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp index 9be41ad7992..04b1114c3d7 100644 --- a/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp +++ b/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp @@ -3,11 +3,14 @@ #include + #include +#include #include #include #include #include + #include #include #include @@ -66,7 +69,13 @@ private slots: void setRepeatAction(); void connectedSliders(); + void sliderChange_QDial() { sliderChange_impl(); } + void sliderChange_QScrollBar() { sliderChange_impl(); } + void sliderChange_QSlider() { sliderChange_impl(); } + private: + template + void sliderChange_impl(); void waitUntilTimeElapsed(const QElapsedTimer &t, int ms); QWidget *topLevel; @@ -2101,5 +2110,58 @@ void tst_QAbstractSlider::connectedSliders() delete slider2; } + + +template +void tst_QAbstractSlider::sliderChange_impl() +{ + struct Tracker : Slider { + using Slider::Slider; + using QAbstractSlider::SliderChange; // make it public + + std::vector changes; + + void sliderChange(QAbstractSlider::SliderChange c) override + { + Slider::sliderChange(c); + changes.push_back(c); + } + }; + using SliderChange = typename Tracker::SliderChange; + + Tracker sl; + QCOMPARE(sl.changes.size(), 0U); + + sl.setRange(0, 100'000); + QCOMPARE(sl.changes.size(), 1U); + QCOMPARE(sl.changes.back(), SliderChange::SliderRangeChange); + sl.changes.clear(); + + sl.setOrientation(sl.orientation() == Qt::Horizontal ? Qt::Vertical + /* else */ : Qt::Horizontal); + QEXPECT_FAIL("", "QTBUG-135597", Continue); + QCOMPARE(sl.changes.size(), 1U); + if (!sl.changes.empty()) { + QEXPECT_FAIL("", "QTBUG-135597", Continue); + QCOMPARE(sl.changes.back(), SliderChange::SliderOrientationChange); + } + sl.changes.clear(); + + sl.setPageStep(1025); // unlikely to be the default ;) + QCOMPARE(sl.changes.size(), 1U); + QCOMPARE(sl.changes.back(), SliderChange::SliderStepsChange); + sl.changes.clear(); + + sl.setSingleStep(42); // unlikely to be the default ;) + QCOMPARE(sl.changes.size(), 1U); + QCOMPARE(sl.changes.back(), SliderChange::SliderStepsChange); + sl.changes.clear(); + + sl.setValue(131); // unlikely to be the default ;) + QCOMPARE(sl.changes.size(), 1U); + QCOMPARE(sl.changes.back(), SliderChange::SliderValueChange); + sl.changes.clear(); +} + QTEST_MAIN(tst_QAbstractSlider) #include "tst_qabstractslider.moc"