diff options
Diffstat (limited to 'tests/auto/widgets/graphicsview')
8 files changed, 180 insertions, 99 deletions
diff --git a/tests/auto/widgets/graphicsview/graphicsview.pro b/tests/auto/widgets/graphicsview/graphicsview.pro index e99897a4f6..0f4c1721e3 100644 --- a/tests/auto/widgets/graphicsview/graphicsview.pro +++ b/tests/auto/widgets/graphicsview/graphicsview.pro @@ -30,3 +30,5 @@ SUBDIRS=\ !contains(styles, fusion):SUBDIRS -= \ qgraphicsproxywidget \ qgraphicswidget \ + +winrt: SUBDIRS -= qgraphicsview # QTBUG-68297 diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index 6c1abaedb3..27eac03880 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -477,7 +477,7 @@ private: void tst_QGraphicsItem::construction() { for (int i = 0; i < 7; ++i) { - QGraphicsItem *item; + QGraphicsItem *item = nullptr; switch (i) { case 0: item = new QGraphicsEllipseItem; @@ -986,6 +986,7 @@ void tst_QGraphicsItem::inputMethodHints() QGraphicsView view(&scene); QApplication::setActiveWindow(&view); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); item->setFocus(); QTRY_VERIFY(item->hasFocus()); @@ -1036,6 +1037,7 @@ void tst_QGraphicsItem::toolTip() view.setFixedSize(200, 200); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); { QHelpEvent helpEvent(QEvent::ToolTip, view.viewport()->rect().topLeft(), @@ -2204,10 +2206,11 @@ void tst_QGraphicsItem::setMatrix() QCOMPARE(spy.count(), 3); QList<QRectF> rlist = qvariant_cast<QList<QRectF> >(spy.last().at(0)); - QCOMPARE(rlist.size(), 3); - QCOMPARE(rlist.at(0), rotatedRect); // From item.setMatrix() (clearing rotated rect) - QCOMPARE(rlist.at(1), rotatedRect); // From scene.update() (updating scene rect) - QCOMPARE(rlist.at(2), unrotatedRect); // From post-update (update current state) + QCOMPARE(rlist.size(), 2); + // From item.setMatrix() (clearing rotated rect), from scene.update() (updating scene rect), + // squashed into one + QCOMPARE(rlist.at(0), rotatedRect); + QCOMPARE(rlist.at(1), unrotatedRect); // From post-update (update current state) } static QList<QGraphicsItem *> _paintedItems; @@ -3226,6 +3229,7 @@ void tst_QGraphicsItem::hoverEventsGenerateRepaints() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); EventTester *tester = new EventTester; @@ -4143,10 +4147,13 @@ void tst_QGraphicsItem::ensureVisible() void tst_QGraphicsItem::cursor() { QGraphicsScene scene; - QGraphicsRectItem *item1 = scene.addRect(QRectF(0, 0, 50, 50)); - QGraphicsRectItem *item2 = scene.addRect(QRectF(0, 0, 50, 50)); - item1->setPos(-100, 0); - item2->setPos(50, 0); + QWidget topLevel; + QGraphicsView view(&scene,&topLevel); + topLevel.showMaximized(); + QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); + view.setFixedSize(topLevel.size()); + QGraphicsRectItem *item1 = scene.addRect(QRectF(-100, 0, 50, 50)); + QGraphicsRectItem *item2 = scene.addRect(QRectF(50, 0, 50, 50)); QVERIFY(!item1->hasCursor()); QVERIFY(!item2->hasCursor()); @@ -4172,14 +4179,6 @@ void tst_QGraphicsItem::cursor() item1->setCursor(Qt::IBeamCursor); item2->setCursor(Qt::PointingHandCursor); - QWidget topLevel; - topLevel.resize(250, 150); - QTestPrivate::centerOnScreen(&topLevel); - QGraphicsView view(&scene,&topLevel); - view.setFixedSize(200, 100); - topLevel.show(); - QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); - QTest::mouseMove(&view, view.rect().center()); const Qt::CursorShape viewportShape = view.viewport()->cursor().shape(); @@ -4938,6 +4937,7 @@ void tst_QGraphicsItem::sceneEventFilter() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QGraphicsTextItem *text1 = scene.addText(QLatin1String("Text1")); @@ -5078,6 +5078,9 @@ void tst_QGraphicsItem::paint() PaintTester tester2; scene2.addItem(&tester2); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Fails on WinRT. Figure out why - QTBUG-68297", Abort); +#endif //First show one paint QTRY_COMPARE(tester2.painted, 1); @@ -6533,6 +6536,9 @@ void tst_QGraphicsItem::ensureUpdateOnTextItem() QVERIFY(QTest::qWaitForWindowExposed(&view)); TextItem *text1 = new TextItem(QLatin1String("123")); scene.addItem(text1); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Fails on WinRT. Figure out why - QTBUG-68297", Abort); +#endif QTRY_COMPARE(text1->updates,1); //same bouding rect but we have to update @@ -6802,6 +6808,7 @@ void tst_QGraphicsItem::opacity2() MyGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints >= 1); @@ -6874,6 +6881,7 @@ void tst_QGraphicsItem::opacityZeroUpdates() MyGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints > 0); @@ -6891,6 +6899,9 @@ void tst_QGraphicsItem::opacityZeroUpdates() QRegion expectedRegion = parentDeviceBoundingRect.adjusted(-2, -2, 2, 2); expectedRegion += childDeviceBoundingRect.adjusted(-2, -2, 2, 2); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Fails on WinRT. Figure out why - QTBUG-68297", Abort); +#endif COMPARE_REGIONS(view.paintedRegion, expectedRegion); } @@ -7262,6 +7273,7 @@ void tst_QGraphicsItem::cacheMode() view.resize(150, 150); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); EventTester *tester = new EventTester; @@ -7440,6 +7452,7 @@ void tst_QGraphicsItem::cacheMode2() view.resize(150, 150); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); EventTester *tester = new EventTester; @@ -8093,6 +8106,7 @@ void tst_QGraphicsItem::moveLineItem() MyGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.reset(); @@ -8108,6 +8122,9 @@ void tst_QGraphicsItem::moveLineItem() // Make sure the calculated region is correct. item->update(); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Fails on WinRT. Figure out why - QTBUG-68297", Abort); +#endif QTRY_COMPARE(view.paintedRegion, expectedRegion); view.reset(); @@ -8161,6 +8178,7 @@ void tst_QGraphicsItem::sorting() view.setFrameStyle(0); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(_paintedItems.count() > 0); @@ -8197,6 +8215,7 @@ void tst_QGraphicsItem::itemHasNoContents() QGraphicsView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(!_paintedItems.isEmpty()); @@ -9204,6 +9223,7 @@ void tst_QGraphicsItem::ensureDirtySceneTransform() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -9590,6 +9610,7 @@ void tst_QGraphicsItem::QTBUG_4233_updateCachedWithSceneRect() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); @@ -10720,6 +10741,7 @@ void tst_QGraphicsItem::scroll() MyGraphicsView view(&scene); view.setFrameStyle(0); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints > 0); @@ -11242,6 +11264,7 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent() MyGraphicsView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints > 0); @@ -11290,6 +11313,7 @@ void tst_QGraphicsItem::QT_2653_fullUpdateDiscardingOpacityUpdate() parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.reset(); @@ -11332,10 +11356,14 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2() origView.reset(); childYellow->setOpacity(0.0); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Fails on WinRT. Figure out why - QTBUG-68297", Abort); +#endif QTRY_COMPARE(origView.repaints, 1); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.reset(); origView.reset(); @@ -11475,6 +11503,7 @@ void tst_QGraphicsItem::doNotMarkFullUpdateIfNotInScene() item2->setParentItem(item); scene.addItem(item); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(view.windowHandle())); QVERIFY(QTest::qWaitForWindowActive(view.windowHandle())); view.activateWindow(); QTRY_VERIFY(view.isActiveWindow()); @@ -11506,6 +11535,7 @@ void tst_QGraphicsItem::itemDiesDuringDraggingOperation() scene.addItem(item); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); QGraphicsSceneDragDropEvent dragEnter(QEvent::GraphicsSceneDragEnter); @@ -11533,6 +11563,7 @@ void tst_QGraphicsItem::QTBUG_12112_focusItem() view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/qgraphicsproxywidget.pro b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/qgraphicsproxywidget.pro index e7bcccb495..c10cbe1b1a 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/qgraphicsproxywidget.pro +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/qgraphicsproxywidget.pro @@ -4,5 +4,6 @@ TARGET = tst_qgraphicsproxywidget QT += widgets widgets-private testlib QT += core-private gui-private +DEFINES += QTEST_QPA_MOUSE_HANDLING SOURCES += tst_qgraphicsproxywidget.cpp diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 4cd2fef2dc..49afc5f369 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -33,12 +33,6 @@ #include <private/qgraphicsproxywidget_p.h> #include <private/qlayoutengine_p.h> // qSmartMin functions... -static void sendMouseMove(QWidget *widget, const QPoint &point, Qt::MouseButton button = Qt::NoButton) -{ - QMouseEvent event(QEvent::MouseMove, point, widget->mapToGlobal(point), button, button, 0); - QApplication::sendEvent(widget, &event); -} - /* Notes: @@ -95,10 +89,8 @@ private slots: void focusNextPrevChild(); void focusOutEvent_data(); void focusOutEvent(); -#ifndef QT_NO_CURSOR void hoverEnterLeaveEvent_data(); void hoverEnterLeaveEvent(); -#endif void hoverMoveEvent_data(); void hoverMoveEvent(); void keyPressEvent_data(); @@ -138,9 +130,7 @@ private slots: void setFocus_complexTwoWidgets(); void popup_basic(); void popup_subwidget(); -#ifndef QT_NO_CURSOR void changingCursor_basic(); -#endif void tooltip_basic(); void childPos_data(); void childPos(); @@ -685,7 +675,6 @@ void tst_QGraphicsProxyWidget::focusInEvent() SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; proxy->setEnabled(true); scene.addItem(proxy); - proxy->setVisible(true); QWidget *widget = new QWidget; widget->resize(100, 100); @@ -716,7 +705,6 @@ void tst_QGraphicsProxyWidget::focusInEventNoWidget() SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; proxy->setEnabled(true); scene.addItem(proxy); - proxy->setVisible(true); view.show(); proxy->setFlag(QGraphicsItem::ItemIsFocusable, true); // <- shouldn't need to do this @@ -931,7 +919,6 @@ protected: } }; -#ifndef QT_NO_CURSOR void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent_data() { QTest::addColumn<bool>("hasWidget"); @@ -952,8 +939,6 @@ void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent() QGraphicsScene scene; QGraphicsView view(&scene); - //do not let the window manager move the window while we are moving the mouse on it - view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.show(); QApplication::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowActive(&view)); @@ -968,31 +953,30 @@ void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent() if (hasWidget) proxy->setWidget(widgetGuard.take()); proxy->setPos(50, 0); + QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed); scene.addItem(proxy); - QTest::qWait(30); + QTRY_VERIFY(sceneChangedSpy.count() > 0); + + // outside graphics item QTest::mouseMove(&view, QPoint(10, 10)); - QTest::qWait(30); - // in + QCOMPARE(widget->testAttribute(Qt::WA_UnderMouse), false); + QCOMPARE(widget->enterCount, 0); + QCOMPARE(widget->hoverEnter, 0); + // over graphics item QTest::mouseMove(&view, QPoint(50, 50)); - QSKIP("QTBUG-25294"); QTRY_COMPARE(widget->testAttribute(Qt::WA_UnderMouse), hasWidget); - // ### this attribute isn't supported QCOMPARE(widget->enterCount, hasWidget ? 1 : 0); QCOMPARE(widget->hoverEnter, (hasWidget && hoverEnabled) ? 1 : 0); - // does not work on all platforms - //QCOMPARE(widget->moveCount, 0); - // out + QTRY_COMPARE(widget->leaveCount, 0); + QTRY_COMPARE(widget->hoverLeave, 0); + // outside graphics item QTest::mouseMove(&view, QPoint(10, 10)); - // QTRY_COMPARE(widget->testAttribute(Qt::WA_UnderMouse), false); - // ### this attribute isn't supported + QTRY_COMPARE(widget->testAttribute(Qt::WA_UnderMouse), false); QTRY_COMPARE(widget->leaveCount, hasWidget ? 1 : 0); QTRY_COMPARE(widget->hoverLeave, (hasWidget && hoverEnabled) ? 1 : 0); - // does not work on all platforms - //QCOMPARE(widget->moveCount, 0); } -#endif void tst_QGraphicsProxyWidget::hoverMoveEvent_data() { @@ -1174,19 +1158,20 @@ void tst_QGraphicsProxyWidget::mouseDoubleClickEvent() widget->setText("foo"); widget->resize(50, 50); view.resize(100, 100); - if (hasWidget) { + if (hasWidget) proxy->setWidget(widget); - proxy->show(); - } proxy->setPos(50, 0); + QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed); scene.addItem(proxy); proxy->setFocus(); - QTest::mouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y()))); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y()))); - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y()))); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y()))); - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y()))); + // wait for scene to be updated before doing any coordinate mappings on it + QTRY_VERIFY(sceneChangedSpy.count() > 0); + + QPoint pointInLineEdit = view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y())); + QTest::mousePress(view.viewport(), Qt::LeftButton, 0, pointInLineEdit); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, pointInLineEdit); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, pointInLineEdit); QTRY_COMPARE(widget->selectedText(), hasWidget ? QString("foo") : QString()); @@ -1217,19 +1202,20 @@ void tst_QGraphicsProxyWidget::mousePressReleaseEvent() QPushButton *widget = new QPushButton; QSignalSpy spy(widget, SIGNAL(clicked())); widget->resize(50, 50); - if (hasWidget) { + if (hasWidget) proxy->setWidget(widget); - proxy->show(); - } proxy->setPos(50, 0); + QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed); scene.addItem(proxy); proxy->setFocus(); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, - view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); + // wait for scene to be updated before doing any coordinate mappings on it + QTRY_VERIFY(sceneChangedSpy.count() > 0); + + QPoint buttonCenter = view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center())); + QTest::mousePress(view.viewport(), Qt::LeftButton, 0, buttonCenter); QTRY_COMPARE(spy.count(), 0); - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, - view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, buttonCenter); QTRY_COMPARE(spy.count(), (hasWidget) ? 1 : 0); if (!hasWidget) @@ -1282,16 +1268,13 @@ void tst_QGraphicsProxyWidget::paintEvent() w->show(); QVERIFY(QTest::qWaitForWindowExposed(w)); - QApplication::processEvents(); - QTest::qWait(30); proxy.setWidget(w); + QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed); scene.addItem(&proxy); - //make sure we flush all the paint events - QTRY_VERIFY(proxy.paintCount > 1); - QTest::qWait(30); - proxy.paintCount = 0; + QTRY_VERIFY(sceneChangedSpy.count() > 0); // make sure the scene is ready + proxy.paintCount = 0; w->update(); QTRY_VERIFY(proxy.paintCount >= 1); //the widget should have been painted now } @@ -2545,35 +2528,34 @@ void tst_QGraphicsProxyWidget::popup_subwidget() QCOMPARE(popup->size(), child->size().toSize()); } -#ifndef QT_NO_CURSOR void tst_QGraphicsProxyWidget::changingCursor_basic() { +#if !QT_CONFIG(cursor) + QSKIP("This test requires the QCursor API"); +#else // Confirm that mouse events are working properly by checking that // when moving the mouse over a line edit it will change the cursor into the I QGraphicsScene scene; QGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowActive(&view)); SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; QLineEdit *widget = new QLineEdit; proxy->setWidget(widget); - proxy->show(); + QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed); scene.addItem(proxy); - QApplication::setActiveWindow(&view); - QVERIFY(QTest::qWaitForWindowActive(&view)); - QVERIFY(view.isActiveWindow()); + QTRY_VERIFY(sceneChangedSpy.count() > 0); // make sure the scene is ready // in QTest::mouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); - sendMouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); QTRY_COMPARE(view.viewport()->cursor().shape(), Qt::IBeamCursor); // out QTest::mouseMove(view.viewport(), QPoint(1, 1)); - sendMouseMove(view.viewport(), QPoint(1, 1)); QTRY_COMPARE(view.viewport()->cursor().shape(), Qt::ArrowCursor); +#endif // !QT_CONFIG(cursor) } -#endif static bool findViewAndTipLabel(const QWidget *view) { @@ -2972,7 +2954,7 @@ void tst_QGraphicsProxyWidget::dontCrashWhenDie() MainWidget *w = new MainWidget(); w->show(); QVERIFY(QTest::qWaitForWindowExposed(w)); - QTest::qWait(100); + QTest::mouseMove(w->view->viewport(), w->view->mapFromScene(w->widget->mapToScene(w->widget->boundingRect().center()))); delete w->item; @@ -3219,9 +3201,6 @@ void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget_data() void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget() { -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) - QSKIP("Test case unstable on this platform, QTBUG-33067"); -#endif QFETCH(bool, bypass); QWidget *widget = new QWidget; @@ -3230,6 +3209,7 @@ void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowActive(&view)); QGraphicsProxyWidget *proxy = scene.addWidget(widget); @@ -3243,6 +3223,7 @@ void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget() QFileDialog *dialog = new QFileDialog(widget, flags); dialog->setOption(QFileDialog::DontUseNativeDialog, true); dialog->show(); + QVERIFY(QTest::qWaitForWindowActive(dialog)); QCOMPARE(proxy->childItems().size(), bypass ? 0 : 1); if (!bypass) @@ -3637,25 +3618,21 @@ public: QPushButton *hideButton = new QPushButton("I'm a button with a very very long text"); hideButton->setGeometry(10, 10, 400, 50); topButton = addWidget(hideButton); - connect(hideButton, SIGNAL(clicked()), this, SLOT(hideButton())); + connect(hideButton, &QPushButton::clicked, this, [&]() { topButton->hide(); }); topButton->setFocus(); } QGraphicsProxyWidget *topButton; HoverButton *hoverButton; - -public slots: - void hideButton() { - QCursor::setPos(600,600); - topButton->hide(); - } }; void tst_QGraphicsProxyWidget::QTBUG_6986_sendMouseEventToAlienWidget() { -#if defined(Q_OS_DARWIN) || defined(Q_OS_WIN) || defined(QT_NO_CURSOR) - QSKIP("Test case unstable on this platform"); -#endif + if (QGuiApplication::platformName() == QLatin1String("cocoa")) { + // The "Second button" does not receive QEvent::HoverLeave + QSKIP("This test fails only on Cocoa. Investigate why. See QTBUG-69219"); + } + QGraphicsView view; Scene scene; view.setScene(&scene); @@ -3663,9 +3640,12 @@ void tst_QGraphicsProxyWidget::QTBUG_6986_sendMouseEventToAlienWidget() QApplication::setActiveWindow(&view); view.show(); QVERIFY(QTest::qWaitForWindowActive(&view)); - QCOMPARE(QApplication::activeWindow(), &view); - QCursor::setPos(view.mapToGlobal(view.mapFromScene(scene.topButton->boundingRect().center()))); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(scene.topButton->scenePos())); + + QPoint topButtonTopLeftCorner = view.mapFromScene(scene.topButton->scenePos()); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, topButtonTopLeftCorner); + // move to the bottom right corner (buttons are placed in the top left corner) + QCOMPARE(scene.hoverButton->hoverLeaveReceived, false); + QTest::mouseMove(view.viewport(), view.viewport()->rect().bottomRight()); QTRY_COMPARE(scene.hoverButton->hoverLeaveReceived, true); } diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST index 70170d2822..0e7a1b451f 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST +++ b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST @@ -3,3 +3,15 @@ osx-10.11 ci [isActive] opensuse-42.3 ci +[removeFullyTransparentItem] +osx-10.11 +osx-10.12 +[tabFocus_sceneWithNestedFocusWidgets] +opensuse +opensuse-leap +[inputMethod] +opensuse +opensuse-leap +[hoverEvents_parentChild] +ubuntu + diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp index b256aab3e7..838b1f4be6 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp @@ -254,6 +254,7 @@ private slots: void zeroScale(); void focusItemChangedSignal(); void minimumRenderSize(); + void focusOnTouch(); // task specific tests below me void task139710_bspTreeCrash(); @@ -1275,10 +1276,10 @@ void tst_QGraphicsScene::removeItem() view.show(); QApplication::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowActive(&view)); - QTest::mouseMove(view.viewport(), view.mapFromScene(hoverItem->scenePos() + QPointF(20, 20)), Qt::NoButton); + QTest::mouseMove(view.windowHandle(), view.mapFromScene(hoverItem->scenePos() + QPointF(20, 20))); QTRY_VERIFY(!hoverItem->isHovered); - QTest::mouseMove(view.viewport(), view.mapFromScene(hoverItem->scenePos()), Qt::NoButton); + QTest::mouseMove(view.windowHandle(), view.mapFromScene(hoverItem->scenePos())); QTRY_VERIFY(hoverItem->isHovered); scene.removeItem(hoverItem); @@ -2657,7 +2658,7 @@ void tst_QGraphicsScene::render() void tst_QGraphicsScene::renderItemsWithNegativeWidthOrHeight() { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) || defined(Q_OS_WINRT) QSKIP("Test only works on platforms with resizable windows"); #endif @@ -4758,6 +4759,41 @@ void tst_QGraphicsScene::minimumRenderSize() QVERIFY(smallChild->repaints > smallerGrandChild->repaints); } +void tst_QGraphicsScene::focusOnTouch() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + scene.setSceneRect(0, 0, 100, 100); + QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100); + rect->setFlag(QGraphicsItem::ItemIsFocusable, true); + + view.show(); + QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + QVERIFY(!rect->hasFocus()); + + scene.setFocusOnTouch(false); + + QTouchDevice device; + device.setType(QTouchDevice::TouchPad); + QList<QTouchEvent::TouchPoint> touchPoints; + QTouchEvent::TouchPoint point; + point.setScenePos(QPointF(10, 10)); + point.setState(Qt::TouchPointPressed); + touchPoints.append(point); + QTouchEvent event(QEvent::TouchBegin, &device, Qt::NoModifier, Qt::TouchPointStates(), + touchPoints); + + QApplication::sendEvent(&scene, &event); + + QVERIFY(!rect->hasFocus()); + scene.setFocusOnTouch(true); + + QApplication::sendEvent(&scene, &event); + QVERIFY(rect->hasFocus()); +} + void tst_QGraphicsScene::taskQTBUG_15977_renderWithDeviceCoordinateCache() { QGraphicsScene scene; diff --git a/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp b/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp index f3ac70ddb5..baccf7bff8 100644 --- a/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp @@ -355,6 +355,9 @@ void tst_QGraphicsSceneIndex::clear() MyItem *item = new MyItem; scene.addItem(item); qApp->processEvents(); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "There is one additional paint event on WinRT - QTBUG-68297", Abort); +#endif QTRY_COMPARE(item->numPaints, 1); } diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index fe5b320492..3dc110298a 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -48,7 +48,6 @@ #include <QtWidgets/QBoxLayout> #include <QtWidgets/QStyle> #include <QtWidgets/QPushButton> -#include <QtWidgets/QDesktopWidget> #ifndef QT_NO_OPENGL #include <QtWidgets/QOpenGLWidget> #endif @@ -262,11 +261,11 @@ private slots: void QTBUG_4151_clipAndIgnore_data(); void QTBUG_4151_clipAndIgnore(); void QTBUG_5859_exposedRect(); + void hoverLeave(); + void QTBUG_16063_microFocusRect(); #ifndef QT_NO_CURSOR void QTBUG_7438_cursor(); #endif - void hoverLeave(); - void QTBUG_16063_microFocusRect(); public slots: void dummySlot() {} @@ -431,6 +430,7 @@ void tst_QGraphicsView::interactive() QCOMPARE(item->events.size(), 0); view.show(); view.activateWindow(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_COMPARE(item->events.size(), 1); // activate @@ -1646,6 +1646,7 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust() view.setFrameStyle(0); view.resize(300, 300); view.showNormal(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(rect->numPaints > 0); @@ -2140,6 +2141,7 @@ void tst_QGraphicsView::sendEvent() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -2207,6 +2209,7 @@ void tst_QGraphicsView::wheelEvent() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -2435,14 +2438,15 @@ void tst_QGraphicsView::viewportUpdateMode() scene.setBackgroundBrush(Qt::red); CustomView view; - QDesktopWidget desktop; - view.setFixedSize(QSize(500, 500).boundedTo(desktop.availableGeometry().size())); // 500 is too big for all common smartphones + QScreen *screen = QGuiApplication::primaryScreen(); + view.setFixedSize(QSize(500, 500).boundedTo(screen->availableGeometry().size())); // 500 is too big for all common smartphones view.setScene(&scene); QCOMPARE(view.viewportUpdateMode(), QGraphicsView::MinimalViewportUpdate); // Show the view, and initialize our test. view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(!view.lastUpdateRegions.isEmpty()); view.lastUpdateRegions.clear(); @@ -2526,6 +2530,7 @@ void tst_QGraphicsView::viewportUpdateMode2() view.resize(200 + left + right, 200 + top + bottom); toplevel.show(); qApp->setActiveWindow(&toplevel); + QVERIFY(QTest::qWaitForWindowExposed(&toplevel)); QVERIFY(QTest::qWaitForWindowActive(&toplevel)); QTRY_VERIFY(view.painted); const QRect viewportRect = view.viewport()->rect(); @@ -3170,6 +3175,7 @@ void tst_QGraphicsView::task172231_untransformableItems() view.scale(2, 1); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -3969,6 +3975,7 @@ void tst_QGraphicsView::exposeRegion() view.setScene(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(item->paints > 0); @@ -4123,6 +4130,7 @@ void tst_QGraphicsView::update2() view.resize(200, 200); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(rect->numPaints > 0); @@ -4192,6 +4200,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape() CustomView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.painted); @@ -4245,6 +4254,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape2() CustomView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.painted); @@ -4305,6 +4315,7 @@ void tst_QGraphicsView::inputMethodSensitivity() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -4399,6 +4410,7 @@ void tst_QGraphicsView::inputContextReset() view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -4546,6 +4558,7 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins() view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); // This is highly unstable (observed to pass on Windows and some Linux configurations). #ifndef Q_OS_MAC @@ -4673,6 +4686,7 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore() view.resize(75, 75); view.show(); view.activateWindow(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); @@ -4710,6 +4724,7 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect() view.scale(4.15, 4.15); view.showNormal(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.viewport()->repaint(10,10,20,20); @@ -4834,6 +4849,7 @@ void tst_QGraphicsView::QTBUG_16063_microFocusRect() view.setFixedSize(40, 40); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); scene.setFocusItem(item); |