diff options
Diffstat (limited to 'tests/auto/quick/qquickpincharea')
-rw-r--r-- | tests/auto/quick/qquickpincharea/data/pinchproperties.qml | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp | 156 |
2 files changed, 92 insertions, 67 deletions
diff --git a/tests/auto/quick/qquickpincharea/data/pinchproperties.qml b/tests/auto/quick/qquickpincharea/data/pinchproperties.qml index 44d116184e..6665e2f597 100644 --- a/tests/auto/quick/qquickpincharea/data/pinchproperties.qml +++ b/tests/auto/quick/qquickpincharea/data/pinchproperties.qml @@ -4,6 +4,7 @@ Rectangle { property variant center property real scale property int pointCount: 0 + property bool pinchActive: false width: 240; height: 320 color: "white" Rectangle { @@ -34,6 +35,7 @@ Rectangle { whiteRect.center = pinch.center whiteRect.scale = pinch.scale whiteRect.pointCount = pinch.pointCount; + whiteRect.pinchActive = true; } onPinchUpdated: { whiteRect.center = pinch.center @@ -44,6 +46,7 @@ Rectangle { whiteRect.center = pinch.center whiteRect.scale = pinch.scale whiteRect.pointCount = pinch.pointCount; + whiteRect.pinchActive = false; } } } diff --git a/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp b/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp index 27efdf7e28..e0e4b6c4d8 100644 --- a/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp +++ b/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp @@ -229,31 +229,41 @@ void tst_QQuickPinchArea::scale() QPoint p1(80, 80); QPoint p2(100, 100); - - QTest::touchEvent(canvas, device).press(0, p1, canvas); - QTest::touchEvent(canvas, device).stationary(0).press(1, p2, canvas); - p1 -= QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1,canvas).move(1, p2,canvas); - - QCOMPARE(root->property("scale").toReal(), 1.0); - - p1 -= QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1,canvas).move(1, p2,canvas); - - QCOMPARE(root->property("scale").toReal(), 1.5); - QCOMPARE(root->property("center").toPointF(), QPointF(40, 40)); // blackrect is at 50,50 - QCOMPARE(blackRect->scale(), 1.5); + { + QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(canvas, device); + pinchSequence.press(0, p1, canvas).commit(); + // In order for the stationary point to remember its previous position, + // we have to reuse the same pinchSequence object. Otherwise if we let it + // be destroyed and then start a new sequence, point 0 will default to being + // stationary at 0, 0, and PinchArea will filter out that touchpoint because + // it is outside its bounds. + pinchSequence.stationary(0).press(1, p2, canvas).commit(); + p1 -= QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1,canvas).move(1, p2,canvas).commit(); + + QCOMPARE(root->property("scale").toReal(), 1.0); + QVERIFY(root->property("pinchActive").toBool()); + + p1 -= QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1,canvas).move(1, p2,canvas).commit(); + + QCOMPARE(root->property("scale").toReal(), 1.5); + QCOMPARE(root->property("center").toPointF(), QPointF(40, 40)); // blackrect is at 50,50 + QCOMPARE(blackRect->scale(), 1.5); + } // scale beyond bound p1 -= QPoint(50,50); p2 += QPoint(50,50); - QTest::touchEvent(canvas, device).move(0, p1, canvas).move(1, p2, canvas); - - QCOMPARE(blackRect->scale(), 2.0); - - QTest::touchEvent(canvas, device).release(0, p1, canvas).release(1, p2, canvas); + { + QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(canvas, device); + pinchSequence.move(0, p1, canvas).move(1, p2, canvas).commit(); + QCOMPARE(blackRect->scale(), 2.0); + pinchSequence.release(0, p1, canvas).release(1, p2, canvas).commit(); + } + QVERIFY(!root->property("pinchActive").toBool()); delete canvas; } @@ -282,21 +292,25 @@ void tst_QQuickPinchArea::pan() QPoint p1(80, 80); QPoint p2(100, 100); - - QTest::touchEvent(canvas, device).press(0, p1, canvas); - QTest::touchEvent(canvas, device).stationary(0).press(1, p2, canvas); - p1 += QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1, canvas).move(1, p2, canvas); - - QCOMPARE(root->property("scale").toReal(), 1.0); - - p1 += QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1, canvas).move(1, p2, canvas); + { + QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(canvas, device); + pinchSequence.press(0, p1, canvas).commit(); + // In order for the stationary point to remember its previous position, + // we have to reuse the same pinchSequence object. + pinchSequence.stationary(0).press(1, p2, canvas).commit(); + p1 += QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1,canvas).move(1, p2,canvas).commit(); + + QCOMPARE(root->property("scale").toReal(), 1.0); + QVERIFY(root->property("pinchActive").toBool()); + + p1 += QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1,canvas).move(1, p2,canvas).commit(); + } QCOMPARE(root->property("center").toPointF(), QPointF(60, 60)); // blackrect is at 50,50 - QCOMPARE(blackRect->x(), 60.0); QCOMPARE(blackRect->y(), 60.0); @@ -309,6 +323,7 @@ void tst_QQuickPinchArea::pan() QCOMPARE(blackRect->y(), 160.0); QTest::touchEvent(canvas, device).release(0, p1, canvas).release(1, p2, canvas); + QVERIFY(!root->property("pinchActive").toBool()); delete canvas; } @@ -341,57 +356,64 @@ void tst_QQuickPinchArea::retouch() QPoint p1(80, 80); QPoint p2(100, 100); + { + QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(canvas, device); + pinchSequence.press(0, p1, canvas).commit(); + // In order for the stationary point to remember its previous position, + // we have to reuse the same pinchSequence object. + pinchSequence.stationary(0).press(1, p2, canvas).commit(); + p1 -= QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1,canvas).move(1, p2,canvas).commit(); - QTest::touchEvent(canvas, device).press(0, p1, canvas); - QTest::touchEvent(canvas, device).stationary(0).press(1, p2, canvas); - p1 -= QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1, canvas).move(1, p2, canvas); - - QCOMPARE(root->property("scale").toReal(), 1.0); + QCOMPARE(root->property("scale").toReal(), 1.0); + QVERIFY(root->property("pinchActive").toBool()); - p1 -= QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1, canvas).move(1, p2, canvas); + p1 -= QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1,canvas).move(1, p2,canvas).commit(); - QCOMPARE(startedSpy.count(), 1); + QCOMPARE(startedSpy.count(), 1); - QCOMPARE(root->property("scale").toReal(), 1.5); - QCOMPARE(root->property("center").toPointF(), QPointF(40, 40)); // blackrect is at 50,50 - QCOMPARE(blackRect->scale(), 1.5); + QCOMPARE(root->property("scale").toReal(), 1.5); + QCOMPARE(root->property("center").toPointF(), QPointF(40, 40)); // blackrect is at 50,50 + QCOMPARE(blackRect->scale(), 1.5); - QCOMPARE(canvas->rootObject()->property("pointCount").toInt(), 2); + QCOMPARE(canvas->rootObject()->property("pointCount").toInt(), 2); - QCOMPARE(startedSpy.count(), 1); - QCOMPARE(finishedSpy.count(), 0); + QCOMPARE(startedSpy.count(), 1); + QCOMPARE(finishedSpy.count(), 0); - QTest::touchEvent(canvas, device).stationary(0).release(1, p2, canvas); + // Hold down the first finger but release the second one + pinchSequence.stationary(0).release(1, p2, canvas).commit(); - QCOMPARE(startedSpy.count(), 1); - QCOMPARE(finishedSpy.count(), 0); + QCOMPARE(startedSpy.count(), 1); + QCOMPARE(finishedSpy.count(), 0); - QCOMPARE(canvas->rootObject()->property("pointCount").toInt(), 1); + QCOMPARE(canvas->rootObject()->property("pointCount").toInt(), 1); - QTest::touchEvent(canvas, device).stationary(0).press(1, p2, canvas); - p1 -= QPoint(10,10); - p2 += QPoint(10,10); - QTest::touchEvent(canvas, device).move(0, p1, canvas).move(1, p2, canvas); + // Keep holding down the first finger and re-touch the second one, then move them both + pinchSequence.stationary(0).press(1, p2, canvas).commit(); + p1 -= QPoint(10,10); + p2 += QPoint(10,10); + pinchSequence.move(0, p1, canvas).move(1, p2, canvas).commit(); - // Lifting and retouching results in onPinchStarted being called again - QCOMPARE(startedSpy.count(), 2); - QCOMPARE(finishedSpy.count(), 0); + // Lifting and retouching results in onPinchStarted being called again + QCOMPARE(startedSpy.count(), 2); + QCOMPARE(finishedSpy.count(), 0); - QCOMPARE(canvas->rootObject()->property("pointCount").toInt(), 2); + QCOMPARE(canvas->rootObject()->property("pointCount").toInt(), 2); - QTest::touchEvent(canvas, device).release(0, p1, canvas).release(1, p2, canvas); + pinchSequence.release(0, p1, canvas).release(1, p2, canvas).commit(); - QCOMPARE(startedSpy.count(), 2); - QCOMPARE(finishedSpy.count(), 1); + QVERIFY(!root->property("pinchActive").toBool()); + QCOMPARE(startedSpy.count(), 2); + QCOMPARE(finishedSpy.count(), 1); + } delete canvas; } - QQuickView *tst_QQuickPinchArea::createView() { QQuickView *canvas = new QQuickView(0); |