From 99aadcad5ebf349057b21c7a579071f12012ec41 Mon Sep 17 00:00:00 2001 From: Axel Spoerl Date: Tue, 1 Nov 2022 10:44:33 +0100 Subject: Stabilize flakiness in tst_QWidget::multipleToplevelFocusCheck() multipleToplevelFocusCheck() occasionally failed on XCB because QApplication::activeWindow() was nullptr immediately after qWaitForWindowActive() returned true. This patch replaces QCOMPARE on QGuiApplicaiton::activeWindow() with QTRY_COMPARE in order to continue spinning the event loop until the condition has been met. It adds QWidget::activateWindow after show() to ensure focus is acquired also when another window has received focus in the meanwhile. Pick-to: 6.2 6.4 Change-Id: If84eb8b77c5a6b16af271334a1fe5eb92c05644b Reviewed-by: Richard Moe Gustavsen --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'tests/auto/widgets/kernel/qwidget') diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 11289ac274..af1c15b517 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -6350,17 +6350,17 @@ void tst_QWidget::multipleToplevelFocusCheck() w2.show(); QVERIFY(QTest::qWaitForWindowExposed(&w2)); - QApplicationPrivate::setActiveWindow(&w1); w1.activateWindow(); + QApplicationPrivate::setActiveWindow(&w1); QVERIFY(QTest::qWaitForWindowActive(&w1)); - QCOMPARE(QApplication::activeWindow(), static_cast(&w1)); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&w1)); QTest::mouseDClick(&w1, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), static_cast(w1.edit)); w2.activateWindow(); QApplicationPrivate::setActiveWindow(&w2); QVERIFY(QTest::qWaitForWindowActive(&w2)); - QCOMPARE(QApplication::activeWindow(), static_cast(&w2)); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&w2)); QTest::mouseClick(&w2, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), nullptr); @@ -6370,14 +6370,14 @@ void tst_QWidget::multipleToplevelFocusCheck() w1.activateWindow(); QApplicationPrivate::setActiveWindow(&w1); QVERIFY(QTest::qWaitForWindowActive(&w1)); - QCOMPARE(QApplication::activeWindow(), static_cast(&w1)); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&w1)); QTest::mouseDClick(&w1, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), static_cast(w1.edit)); w2.activateWindow(); QApplicationPrivate::setActiveWindow(&w2); QVERIFY(QTest::qWaitForWindowActive(&w2)); - QCOMPARE(QApplication::activeWindow(), static_cast(&w2)); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&w2)); QTest::mouseClick(&w2, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), nullptr); } -- cgit v1.2.3