From 4b15a8ea8fe0d64b529b859a3dba0de68b92ce85 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 2 Mar 2021 20:11:59 +0100 Subject: Prospective fix for flaky test tst_QDoubleSpinBox::setReadOnly() The test has been observed to fail with: FAIL! : tst_QDoubleSpinBox::setReadOnly() 'QTest::qWaitForWindowActive(&spin)' returned FALSE. () /Users/qt/work/qt/qtbase/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp(863) : failure location Remove the widget member and use a widget instantiated on the stack instead. Add a check for top level widget leaks in cleanup() and fix leaking task224497_fltMax() by instantiating the widget on the stack. Pick-to: 6.1 Change-Id: Idbbb5d859c0df2d9b9f49fb9f69ef6bb7d1ee150 Reviewed-by: Volker Hilsheimer --- .../widgets/qdoublespinbox/tst_qdoublespinbox.cpp | 56 +++++++++------------- 1 file changed, 22 insertions(+), 34 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp index 6b0c353e3b..09fc8343b5 100644 --- a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp +++ b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp @@ -134,8 +134,8 @@ public: virtual ~tst_QDoubleSpinBox(); public slots: void initTestCase(); - void cleanupTestCase(); void init(); + void cleanup(); private slots: void germanTest(); @@ -213,7 +213,6 @@ public slots: private: QStringList actualTexts; QList actualValues; - QWidget *testFocusWidget; }; typedef QList DoubleList; @@ -257,25 +256,18 @@ tst_QDoubleSpinBox::~tst_QDoubleSpinBox() void tst_QDoubleSpinBox::initTestCase() { - testFocusWidget = new QWidget(0); - testFocusWidget->resize(200, 100); - testFocusWidget->show(); - if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) QSKIP("Wayland: This fails. Figure out why."); - - QVERIFY(QTest::qWaitForWindowActive(testFocusWidget)); } -void tst_QDoubleSpinBox::cleanupTestCase() +void tst_QDoubleSpinBox::init() { - delete testFocusWidget; - testFocusWidget = 0; + QLocale::setDefault(QLocale(QLocale::C)); } -void tst_QDoubleSpinBox::init() +void tst_QDoubleSpinBox::cleanup() { - QLocale::setDefault(QLocale(QLocale::C)); + QTRY_VERIFY(QApplication::topLevelWidgets().isEmpty()); } void tst_QDoubleSpinBox::setValue_data() @@ -878,15 +870,16 @@ void tst_QDoubleSpinBox::setReadOnly() void tst_QDoubleSpinBox::editingFinished() { - QVBoxLayout *layout = new QVBoxLayout(testFocusWidget); - QDoubleSpinBox *box = new QDoubleSpinBox(testFocusWidget); + QWidget testFocusWidget(nullptr); + QVBoxLayout *layout = new QVBoxLayout(&testFocusWidget); + QDoubleSpinBox *box = new QDoubleSpinBox(&testFocusWidget); layout->addWidget(box); - QDoubleSpinBox *box2 = new QDoubleSpinBox(testFocusWidget); + QDoubleSpinBox *box2 = new QDoubleSpinBox(&testFocusWidget); layout->addWidget(box2); - testFocusWidget->show(); - testFocusWidget->activateWindow(); - QVERIFY(QTest::qWaitForWindowActive(testFocusWidget)); + testFocusWidget.show(); + testFocusWidget.activateWindow(); + QVERIFY(QTest::qWaitForWindowActive(&testFocusWidget)); box->setFocus(); QTRY_VERIFY(box->hasFocus()); @@ -925,14 +918,9 @@ void tst_QDoubleSpinBox::editingFinished() QTest::keyClick(box2, Qt::Key_Return); QCOMPARE(editingFinishedSpy1.count(), 4); QCOMPARE(editingFinishedSpy2.count(), 3); - testFocusWidget->hide(); + testFocusWidget.hide(); QCOMPARE(editingFinishedSpy1.count(), 4); QCOMPARE(editingFinishedSpy2.count(), 4); - - // On some platforms this is our root window - // we need to show it again otherwise subsequent - // tests will fail - testFocusWidget->show(); } void tst_QDoubleSpinBox::removeAll() @@ -1111,15 +1099,15 @@ public: void tst_QDoubleSpinBox::task224497_fltMax() { - task224497_fltMax_DoubleSpinBox *dspin = new task224497_fltMax_DoubleSpinBox; - dspin->setMinimum(3); - dspin->setMaximum(FLT_MAX); - dspin->show(); - QVERIFY(QTest::qWaitForWindowActive(dspin)); - dspin->lineEdit()->selectAll(); - QTest::keyClick(dspin->lineEdit(), Qt::Key_Delete); - QTest::keyClick(dspin->lineEdit(), Qt::Key_1); - QCOMPARE(dspin->cleanText(), QLatin1String("1")); + task224497_fltMax_DoubleSpinBox dspin; + dspin.setMinimum(3); + dspin.setMaximum(FLT_MAX); + dspin.show(); + QVERIFY(QTest::qWaitForWindowActive(&dspin)); + dspin.lineEdit()->selectAll(); + QTest::keyClick(dspin.lineEdit(), Qt::Key_Delete); + QTest::keyClick(dspin.lineEdit(), Qt::Key_1); + QCOMPARE(dspin.cleanText(), QLatin1String("1")); } void tst_QDoubleSpinBox::task221221() -- cgit v1.2.3