tst_Gesture - fix failing tests on OS X 10.11

This test seems to be quite broken on OS X: qWaitForWindowExposed returns
too early (while no window is on screen) so gestures can not be dispatched
QApplication::topLevelAt(pt) - returns null.
Use qWait + isExposed combo instead (similar to qWaitForWindowExposed, but
there is no isExposed test before the loop).

Change-Id: I85fbd773ccce0ca92b2dceb1749d67ef767aa0cf
Task-number: QTBUG-49849
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
This commit is contained in:
Timur Pocheptsov 2016-01-04 16:37:55 +01:00
parent 60c333caba
commit 4ed8733d90

View File

@ -48,6 +48,24 @@
#include <qdebug.h>
static bool waitForWindowExposed(QWindow *window)
{
if (!window)
return false;
#ifdef Q_OS_OSX
QTest::qWait(100);
return window->isExposed();
#endif
return QTest::qWaitForWindowExposed(window);
}
static bool waitForWindowExposed(QWidget *widget)
{
if (!widget)
return false;
return waitForWindowExposed(widget->windowHandle());
}
static QPointF mapToGlobal(const QPointF &pt, QGraphicsItem *item, QGraphicsView *view)
{
return view->viewport()->mapToGlobal(view->mapFromScene(item->mapToScene(pt)));
@ -387,7 +405,7 @@ void tst_Gestures::customGesture()
GestureWidget widget;
widget.grabGesture(CustomGesture::GestureType, Qt::DontStartGestureOnChildren);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QVERIFY(waitForWindowExposed(&widget));
CustomEvent event;
event.hotSpot = widget.mapToGlobal(QPoint(5,5));
@ -856,7 +874,7 @@ void tst_Gestures::graphicsItemGesture()
item->setPos(100, 100);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item->grabGesture(CustomGesture::GestureType);
@ -918,7 +936,7 @@ void tst_Gestures::graphicsView()
item->setPos(100, 100);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item->grabGesture(CustomGesture::GestureType);
@ -994,7 +1012,7 @@ void tst_Gestures::graphicsItemTreeGesture()
item1_child2->setParentItem(item1);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item1->grabGesture(CustomGesture::GestureType);
@ -1051,7 +1069,7 @@ void tst_Gestures::explicitGraphicsObjectTarget()
item2_child1->setPos(10, 10);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item1->grabGesture(CustomGesture::GestureType, Qt::DontStartGestureOnChildren);
@ -1110,7 +1128,7 @@ void tst_Gestures::gestureOverChildGraphicsItem()
item2_child1->setPos(0, 0);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item1->grabGesture(CustomGesture::GestureType);
@ -1408,7 +1426,7 @@ void tst_Gestures::testMapToScene()
item0->setPos(14, 16);
view.show(); // need to show to give it a global coordinate
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
QPoint origin = view.mapToGlobal(QPoint());
@ -1534,7 +1552,7 @@ void tst_Gestures::autoCancelGestures()
parent.grabGesture(CustomGesture::GestureType);
child->grabGesture(secondGesture);
parent.show();
QVERIFY(QTest::qWaitForWindowExposed(&parent));
QVERIFY(waitForWindowExposed(&parent));
/*
An event is sent to both the child and the parent, when the child gets it a gesture is triggered
@ -1593,7 +1611,7 @@ void tst_Gestures::autoCancelGestures2()
child->grabGesture(secondGesture);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
CustomEvent event;
@ -1639,7 +1657,7 @@ void tst_Gestures::graphicsViewParentPropagation()
item1_c1_c1->setPos(0, 0);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item0->grabGesture(CustomGesture::GestureType, Qt::ReceivePartialGestures | Qt::IgnoredGesturesPropagateToParent);
@ -1709,7 +1727,7 @@ void tst_Gestures::panelPropagation()
item1_child1_child1->setZValue(10);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
@ -1820,7 +1838,7 @@ void tst_Gestures::panelStacksBehindParent()
panel->setZValue(5);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
@ -1904,7 +1922,7 @@ void tst_Gestures::deleteGestureTargetItem()
items.insert(item2->objectName(), item2);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
if (propagateUpdateGesture)
@ -1949,7 +1967,7 @@ void tst_Gestures::viewportCoordinates()
scene.addItem(item1);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
CustomEvent event;
@ -1986,7 +2004,7 @@ void tst_Gestures::partialGesturePropagation()
scene.addItem(item4);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item1->ignoredUpdatedGestures << CustomGesture::GestureType;
@ -2074,7 +2092,7 @@ void tst_Gestures::testQGestureRecognizerCleanup()
//QGestureRecognizer::registerRecognizer(new PanRecognizer(PanRecognizer::Custom));
w->show();
QVERIFY(QTest::qWaitForWindowExposed(w));
QVERIFY(waitForWindowExposed(w));
delete w;
}
@ -2195,7 +2213,7 @@ void tst_Gestures::testReuseCanceledGestures()
gv->viewport()->grabGesture(tapGestureTypeId);
mw.show();
QVERIFY(QTest::qWaitForWindowExposed(&mw));
QVERIFY(waitForWindowExposed(&mw));
QPoint targetPos(gv->mapFromScene(target->mapToScene(target->rect().center())));
targetPos = gv->viewport()->mapFromParent(targetPos);
@ -2261,7 +2279,7 @@ void tst_Gestures::conflictingGesturesInGraphicsView()
scene.addItem(item2);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(waitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
@ -2326,7 +2344,7 @@ void tst_Gestures::bug_13501_gesture_not_accepted()
NoConsumeWidgetBug13501 w;
w.grabGesture(Qt::TapGesture);
w.show();
QVERIFY(QTest::qWaitForWindowExposed(&w));
QVERIFY(waitForWindowExposed(&w));
//QTest::mousePress(&ignoreEvent, Qt::LeftButton);
QTouchDevice *device = new QTouchDevice;
device->setType(QTouchDevice::TouchScreen);