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 <volker.hilsheimer@qt.io>
This commit is contained in:
parent
847c0bf076
commit
f4e892d797
@ -3,11 +3,14 @@
|
||||
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#include <QAbstractSlider>
|
||||
#include <QtWidgets/qdial.h>
|
||||
#include <QScrollBar>
|
||||
#include <QSlider>
|
||||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include <QElapsedTimer>
|
||||
#include <QDebug>
|
||||
#include <QSignalSpy>
|
||||
@ -66,7 +69,13 @@ private slots:
|
||||
void setRepeatAction();
|
||||
void connectedSliders();
|
||||
|
||||
void sliderChange_QDial() { sliderChange_impl<QDial>(); }
|
||||
void sliderChange_QScrollBar() { sliderChange_impl<QScrollBar>(); }
|
||||
void sliderChange_QSlider() { sliderChange_impl<QSlider>(); }
|
||||
|
||||
private:
|
||||
template <typename Slider>
|
||||
void sliderChange_impl();
|
||||
void waitUntilTimeElapsed(const QElapsedTimer &t, int ms);
|
||||
|
||||
QWidget *topLevel;
|
||||
@ -2101,5 +2110,58 @@ void tst_QAbstractSlider::connectedSliders()
|
||||
delete slider2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename Slider>
|
||||
void tst_QAbstractSlider::sliderChange_impl()
|
||||
{
|
||||
struct Tracker : Slider {
|
||||
using Slider::Slider;
|
||||
using QAbstractSlider::SliderChange; // make it public
|
||||
|
||||
std::vector<QAbstractSlider::SliderChange> 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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user