From d6284de7559248cebceb0b0e282719b23d5f3e66 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.8 6.5 5.15 Task-number: QTBUG-135597 Change-Id: I959077f030976937dd279897748025afa06e74dd Reviewed-by: Volker Hilsheimer (cherry picked from commit f4e892d79768a6c4da8acf42da954a8f2e611f4b) Reviewed-by: Qt Cherry-pick Bot --- .../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"