Stabilize tst_qgraphicsitem and tst_qgraphicsview

Add qWaitForWindowExposed() calls in addition to the
existing qWaitForWindowActive().

Depending on the platform, window activation events may
be synchronous, which means that a window can (and will)
become active before it becomes exposed.

This causes test failures for tests that count paint
event, and does not wait-for-exposed, when the expose/paint
event is delivered after waitForWindowActive() has returned.

We need to keep the waitForWindowActive() as well: the
test has several qWait() calls with he comment:
  “Increase the probability of window activation not
   causing another repaint of test items”.
These qWait() calls can possibly be removed in a future
commit.

Task-number: QTBUG-66536
Task-number: QTBUG-61967
Change-Id: Ie61bba058b583fdd1d80e600475aff3efccc32eb
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Morten Johan Sørvig 2018-03-07 13:36:00 +01:00
parent b4650d9bcf
commit dae8133ded
2 changed files with 37 additions and 0 deletions

View File

@ -986,6 +986,7 @@ void tst_QGraphicsItem::inputMethodHints()
QGraphicsView view(&scene); QGraphicsView view(&scene);
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
item->setFocus(); item->setFocus();
QTRY_VERIFY(item->hasFocus()); QTRY_VERIFY(item->hasFocus());
@ -1036,6 +1037,7 @@ void tst_QGraphicsItem::toolTip()
view.setFixedSize(200, 200); view.setFixedSize(200, 200);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
{ {
QHelpEvent helpEvent(QEvent::ToolTip, view.viewport()->rect().topLeft(), QHelpEvent helpEvent(QEvent::ToolTip, view.viewport()->rect().topLeft(),
@ -3251,6 +3253,7 @@ void tst_QGraphicsItem::hoverEventsGenerateRepaints()
QGraphicsScene scene; QGraphicsScene scene;
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
EventTester *tester = new EventTester; EventTester *tester = new EventTester;
@ -4975,6 +4978,7 @@ void tst_QGraphicsItem::sceneEventFilter()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QGraphicsTextItem *text1 = scene.addText(QLatin1String("Text1")); QGraphicsTextItem *text1 = scene.addText(QLatin1String("Text1"));
@ -6850,6 +6854,7 @@ void tst_QGraphicsItem::opacity2()
MyGraphicsView view(&scene); MyGraphicsView view(&scene);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.repaints >= 1); QTRY_VERIFY(view.repaints >= 1);
@ -6927,6 +6932,7 @@ void tst_QGraphicsItem::opacityZeroUpdates()
MyGraphicsView view(&scene); MyGraphicsView view(&scene);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.repaints > 0); QTRY_VERIFY(view.repaints > 0);
@ -7322,6 +7328,7 @@ void tst_QGraphicsItem::cacheMode()
view.resize(150, 150); view.resize(150, 150);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
// Increase the probability of window activation // Increase the probability of window activation
@ -7516,6 +7523,7 @@ void tst_QGraphicsItem::cacheMode2()
view.resize(150, 150); view.resize(150, 150);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
// Increase the probability of window activation // Increase the probability of window activation
@ -8180,6 +8188,7 @@ void tst_QGraphicsItem::moveLineItem()
MyGraphicsView view(&scene); MyGraphicsView view(&scene);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
view.reset(); view.reset();
@ -8250,6 +8259,7 @@ void tst_QGraphicsItem::sorting()
view.setFrameStyle(0); view.setFrameStyle(0);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTest::qWait(100); QTest::qWait(100);
@ -8286,6 +8296,7 @@ void tst_QGraphicsItem::itemHasNoContents()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(!_paintedItems.isEmpty()); QTRY_VERIFY(!_paintedItems.isEmpty());
@ -9294,6 +9305,7 @@ void tst_QGraphicsItem::ensureDirtySceneTransform()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@ -9680,6 +9692,7 @@ void tst_QGraphicsItem::QTBUG_4233_updateCachedWithSceneRect()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view);
@ -10810,6 +10823,7 @@ void tst_QGraphicsItem::scroll()
MyGraphicsView view(&scene); MyGraphicsView view(&scene);
view.setFrameStyle(0); view.setFrameStyle(0);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.repaints > 0); QTRY_VERIFY(view.repaints > 0);
@ -11332,6 +11346,7 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent()
MyGraphicsView view(&scene); MyGraphicsView view(&scene);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.repaints > 0); QTRY_VERIFY(view.repaints > 0);
@ -11380,6 +11395,7 @@ void tst_QGraphicsItem::QT_2653_fullUpdateDiscardingOpacityUpdate()
parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations); parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
view.reset(); view.reset();
@ -11426,6 +11442,7 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2()
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
view.reset(); view.reset();
origView.reset(); origView.reset();
@ -11565,6 +11582,7 @@ void tst_QGraphicsItem::doNotMarkFullUpdateIfNotInScene()
item2->setParentItem(item); item2->setParentItem(item);
scene.addItem(item); scene.addItem(item);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(view.windowHandle()));
QVERIFY(QTest::qWaitForWindowActive(view.windowHandle())); QVERIFY(QTest::qWaitForWindowActive(view.windowHandle()));
view.activateWindow(); view.activateWindow();
QTRY_VERIFY(view.isActiveWindow()); QTRY_VERIFY(view.isActiveWindow());
@ -11596,6 +11614,7 @@ void tst_QGraphicsItem::itemDiesDuringDraggingOperation()
scene.addItem(item); scene.addItem(item);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view);
QGraphicsSceneDragDropEvent dragEnter(QEvent::GraphicsSceneDragEnter); QGraphicsSceneDragDropEvent dragEnter(QEvent::GraphicsSceneDragEnter);
@ -11623,6 +11642,7 @@ void tst_QGraphicsItem::QTBUG_12112_focusItem()
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view);

View File

@ -431,6 +431,7 @@ void tst_QGraphicsView::interactive()
QCOMPARE(item->events.size(), 0); QCOMPARE(item->events.size(), 0);
view.show(); view.show();
view.activateWindow(); view.activateWindow();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_COMPARE(item->events.size(), 1); // activate QTRY_COMPARE(item->events.size(), 1); // activate
@ -1655,6 +1656,7 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust()
view.setFrameStyle(0); view.setFrameStyle(0);
view.resize(300, 300); view.resize(300, 300);
view.showNormal(); view.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(rect->numPaints > 0); QTRY_VERIFY(rect->numPaints > 0);
@ -2149,6 +2151,7 @@ void tst_QGraphicsView::sendEvent()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@ -2216,6 +2219,7 @@ void tst_QGraphicsView::wheelEvent()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@ -2452,6 +2456,7 @@ void tst_QGraphicsView::viewportUpdateMode()
// Show the view, and initialize our test. // Show the view, and initialize our test.
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(!view.lastUpdateRegions.isEmpty()); QTRY_VERIFY(!view.lastUpdateRegions.isEmpty());
view.lastUpdateRegions.clear(); view.lastUpdateRegions.clear();
@ -2536,6 +2541,7 @@ void tst_QGraphicsView::viewportUpdateMode2()
view.resize(200 + left + right, 200 + top + bottom); view.resize(200 + left + right, 200 + top + bottom);
toplevel.show(); toplevel.show();
qApp->setActiveWindow(&toplevel); qApp->setActiveWindow(&toplevel);
QVERIFY(QTest::qWaitForWindowExposed(&toplevel));
QVERIFY(QTest::qWaitForWindowActive(&toplevel)); QVERIFY(QTest::qWaitForWindowActive(&toplevel));
QTRY_VERIFY(view.painted); QTRY_VERIFY(view.painted);
const QRect viewportRect = view.viewport()->rect(); const QRect viewportRect = view.viewport()->rect();
@ -3192,6 +3198,7 @@ void tst_QGraphicsView::task172231_untransformableItems()
view.scale(2, 1); view.scale(2, 1);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@ -3994,6 +4001,7 @@ void tst_QGraphicsView::exposeRegion()
view.setScene(&scene); view.setScene(&scene);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(item->paints > 0); QTRY_VERIFY(item->paints > 0);
@ -4148,6 +4156,7 @@ void tst_QGraphicsView::update2()
view.resize(200, 200); view.resize(200, 200);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(rect->numPaints > 0); QTRY_VERIFY(rect->numPaints > 0);
@ -4217,6 +4226,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape()
CustomView view(&scene); CustomView view(&scene);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.painted); QTRY_VERIFY(view.painted);
@ -4270,6 +4280,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape2()
CustomView view(&scene); CustomView view(&scene);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.painted); QTRY_VERIFY(view.painted);
@ -4332,6 +4343,7 @@ void tst_QGraphicsView::inputMethodSensitivity()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@ -4426,6 +4438,7 @@ void tst_QGraphicsView::inputContextReset()
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@ -4573,6 +4586,7 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins()
view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.setWindowFlags(Qt::X11BypassWindowManagerHint);
view.show(); view.show();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
// This is highly unstable (observed to pass on Windows and some Linux configurations). // This is highly unstable (observed to pass on Windows and some Linux configurations).
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
@ -4700,6 +4714,7 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore()
view.resize(75, 75); view.resize(75, 75);
view.show(); view.show();
view.activateWindow(); view.activateWindow();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view);
@ -4737,6 +4752,7 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect()
view.scale(4.15, 4.15); view.scale(4.15, 4.15);
view.showNormal(); view.showNormal();
qApp->setActiveWindow(&view); qApp->setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
view.viewport()->repaint(10,10,20,20); view.viewport()->repaint(10,10,20,20);
@ -4861,6 +4877,7 @@ void tst_QGraphicsView::QTBUG_16063_microFocusRect()
view.setFixedSize(40, 40); view.setFixedSize(40, 40);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
scene.setFocusItem(item); scene.setFocusItem(item);