1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the test suite of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include <QtTest/QtTest>
43 #include <QtTest/QSignalSpy>
44 #include <private/qquickmultipointtoucharea_p.h>
45 #include <private/qquickflickable_p.h>
46 #include <QtQuick/qquickview.h>
48 class tst_QQuickMultiPointTouchArea: public QObject
52 tst_QQuickMultiPointTouchArea() : device(0) { }
56 device = new QTouchDevice;
57 device->setType(QTouchDevice::TouchScreen);
58 QWindowSystemInterface::registerTouchDevice(device);
61 void cleanupTestCase() {}
67 void nonOverlapping();
73 QQuickView *createAndShowView(const QString &file);
77 void tst_QQuickMultiPointTouchArea::properties()
79 QQuickView *canvas = createAndShowView("properties.qml");
80 QVERIFY(canvas->rootObject() != 0);
82 QQuickMultiPointTouchArea *area = qobject_cast<QQuickMultiPointTouchArea *>(canvas->rootObject());
85 QCOMPARE(area->minimumTouchPoints(), 2);
86 QCOMPARE(area->maximumTouchPoints(), 4);
88 QDeclarativeListReference ref(area, "touchPoints");
89 QCOMPARE(ref.count(), 4);
94 void tst_QQuickMultiPointTouchArea::signalTest()
96 QQuickView *canvas = createAndShowView("signalTest.qml");
97 QVERIFY(canvas->rootObject() != 0);
99 QQuickMultiPointTouchArea *area = qobject_cast<QQuickMultiPointTouchArea *>(canvas->rootObject());
108 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
110 sequence.press(0, p1).press(1, p2).commit();
112 QCOMPARE(area->property("touchPointPressCount").toInt(), 2);
113 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
114 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
115 QCOMPARE(area->property("touchCount").toInt(), 2);
116 QMetaObject::invokeMethod(area, "clearCounts");
118 sequence.stationary(0).stationary(1).press(2, p3).commit();
120 QCOMPARE(area->property("touchPointPressCount").toInt(), 1);
121 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
122 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
123 QCOMPARE(area->property("touchCount").toInt(), 3);
124 QMetaObject::invokeMethod(area, "clearCounts");
128 sequence.move(0, p1).move(1, p2).stationary(2).commit();
130 QCOMPARE(area->property("touchPointPressCount").toInt(), 0);
131 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 2);
132 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
133 QCOMPARE(area->property("touchCount").toInt(), 3);
134 QMetaObject::invokeMethod(area, "clearCounts");
137 sequence.release(0, p1).release(1, p2)
138 .move(2, p3).press(3, p4).press(4, p5).commit();
140 QCOMPARE(area->property("touchPointPressCount").toInt(), 2);
141 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 1);
142 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 2);
143 QCOMPARE(area->property("touchCount").toInt(), 3);
144 QMetaObject::invokeMethod(area, "clearCounts");
146 sequence.release(2, p3).release(3, p4).release(4, p5).commit();
148 QCOMPARE(area->property("touchPointPressCount").toInt(), 0);
149 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
150 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 3);
151 QCOMPARE(area->property("touchCount").toInt(), 0);
152 QCOMPARE(area->property("touchUpdatedHandled").toBool(), true);
153 QMetaObject::invokeMethod(area, "clearCounts");
158 void tst_QQuickMultiPointTouchArea::release()
160 QQuickView *canvas = createAndShowView("basic.qml");
161 QVERIFY(canvas->rootObject() != 0);
163 QQuickTouchPoint *point1 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point1");
165 QCOMPARE(point1->pressed(), false);
169 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
171 sequence.press(0, p1).commit();
173 QCOMPARE(point1->pressed(), true);
177 sequence.move(0, p1).commit();
179 QCOMPARE(point1->pressed(), true);
180 QCOMPARE(point1->x(), qreal(20)); QCOMPARE(point1->y(), qreal(110));
184 sequence.release(0, p1).commit();
186 //test that a release without a prior move to the release position successfully updates the point's position
187 QCOMPARE(point1->pressed(), false);
188 QCOMPARE(point1->x(), qreal(24)); QCOMPARE(point1->y(), qreal(120));
193 void tst_QQuickMultiPointTouchArea::reuse()
195 QQuickView *canvas = createAndShowView("basic.qml");
196 QVERIFY(canvas->rootObject() != 0);
198 QQuickTouchPoint *point1 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point1");
199 QQuickTouchPoint *point2 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point2");
200 QQuickTouchPoint *point3 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point3");
202 QCOMPARE(point1->pressed(), false);
203 QCOMPARE(point2->pressed(), false);
210 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
212 sequence.press(0, p1).press(1, p2).commit();
214 QCOMPARE(point1->pressed(), true);
215 QCOMPARE(point2->pressed(), true);
216 QCOMPARE(point3->pressed(), false);
218 sequence.release(0, p1).stationary(1).press(2, p3).commit();
220 //we shouldn't reuse point 1 yet
221 QCOMPARE(point1->pressed(), false);
222 QCOMPARE(point2->pressed(), true);
223 QCOMPARE(point3->pressed(), true);
225 //back to base state (no touches)
226 sequence.release(1, p2).release(2, p3).commit();
228 QCOMPARE(point1->pressed(), false);
229 QCOMPARE(point2->pressed(), false);
230 QCOMPARE(point3->pressed(), false);
232 sequence.press(0, p1).press(1, p2).commit();
234 QCOMPARE(point1->pressed(), true);
235 QCOMPARE(point2->pressed(), true);
236 QCOMPARE(point3->pressed(), false);
238 sequence.release(0, p1).stationary(1).commit();
240 QCOMPARE(point1->pressed(), false);
241 QCOMPARE(point2->pressed(), true);
242 QCOMPARE(point3->pressed(), false);
244 sequence.press(4, p4).stationary(1).commit();
246 //the new touch point should reuse point 1
247 QCOMPARE(point1->pressed(), true);
248 QCOMPARE(point2->pressed(), true);
249 QCOMPARE(point3->pressed(), false);
251 QCOMPARE(point1->x(), qreal(80)); QCOMPARE(point1->y(), qreal(100));
256 void tst_QQuickMultiPointTouchArea::nonOverlapping()
258 QQuickView *canvas = createAndShowView("nonOverlapping.qml");
259 QVERIFY(canvas->rootObject() != 0);
261 QQuickTouchPoint *point11 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point11");
262 QQuickTouchPoint *point12 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point12");
263 QQuickTouchPoint *point21 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point21");
264 QQuickTouchPoint *point22 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point22");
265 QQuickTouchPoint *point23 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point23");
267 QCOMPARE(point11->pressed(), false);
268 QCOMPARE(point12->pressed(), false);
269 QCOMPARE(point21->pressed(), false);
270 QCOMPARE(point22->pressed(), false);
271 QCOMPARE(point23->pressed(), false);
279 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
281 sequence.press(0, p1).commit();
283 QCOMPARE(point11->pressed(), false);
284 QCOMPARE(point12->pressed(), false);
285 QCOMPARE(point21->pressed(), false);
286 QCOMPARE(point22->pressed(), false);
287 QCOMPARE(point23->pressed(), false);
289 sequence.stationary(0).press(1, p2).commit();
291 QCOMPARE(point11->pressed(), true);
292 QCOMPARE(point12->pressed(), true);
293 QCOMPARE(point21->pressed(), false);
294 QCOMPARE(point22->pressed(), false);
295 QCOMPARE(point23->pressed(), false);
297 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(100));
298 QCOMPARE(point12->x(), qreal(40)); QCOMPARE(point12->y(), qreal(100));
302 sequence.move(0, p1).move(1, p2).commit();
304 QCOMPARE(point11->pressed(), true);
305 QCOMPARE(point12->pressed(), true);
306 QCOMPARE(point21->pressed(), false);
307 QCOMPARE(point22->pressed(), false);
308 QCOMPARE(point23->pressed(), false);
310 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
311 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
313 sequence.stationary(0).stationary(1).press(2, p3).commit();
315 QCOMPARE(point11->pressed(), true);
316 QCOMPARE(point12->pressed(), true);
317 QCOMPARE(point21->pressed(), false);
318 QCOMPARE(point22->pressed(), false);
319 QCOMPARE(point23->pressed(), false);
321 sequence.stationary(0).stationary(1).stationary(2).press(3, p4).press(4, p5).commit();
323 QCOMPARE(point11->pressed(), true);
324 QCOMPARE(point12->pressed(), true);
325 QCOMPARE(point21->pressed(), true);
326 QCOMPARE(point22->pressed(), true);
327 QCOMPARE(point23->pressed(), true);
329 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
330 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
331 QCOMPARE(point21->x(), qreal(60)); QCOMPARE(point21->y(), qreal(20));
332 QCOMPARE(point22->x(), qreal(80)); QCOMPARE(point22->y(), qreal(20));
333 QCOMPARE(point23->x(), qreal(100)); QCOMPARE(point23->y(), qreal(20));
340 sequence.move(0, p1).move(1, p2).move(2, p3).move(3, p4).move(4, p5).commit();
342 QCOMPARE(point11->pressed(), true);
343 QCOMPARE(point12->pressed(), true);
344 QCOMPARE(point21->pressed(), true);
345 QCOMPARE(point22->pressed(), true);
346 QCOMPARE(point23->pressed(), true);
348 QCOMPARE(point11->x(), qreal(24)); QCOMPARE(point11->y(), qreal(120));
349 QCOMPARE(point12->x(), qreal(62)); QCOMPARE(point12->y(), qreal(117));
350 QCOMPARE(point21->x(), qreal(63)); QCOMPARE(point21->y(), qreal(20));
351 QCOMPARE(point22->x(), qreal(81)); QCOMPARE(point22->y(), qreal(19));
352 QCOMPARE(point23->x(), qreal(93)); QCOMPARE(point23->y(), qreal(30));
354 sequence.release(0, p1).release(1, p2).release(2, p3).release(3, p4).release(4, p5).commit();
356 QCOMPARE(point11->pressed(), false);
357 QCOMPARE(point12->pressed(), false);
358 QCOMPARE(point21->pressed(), false);
359 QCOMPARE(point22->pressed(), false);
360 QCOMPARE(point23->pressed(), false);
365 void tst_QQuickMultiPointTouchArea::nested()
367 QQuickView *canvas = createAndShowView("nested.qml");
368 QVERIFY(canvas->rootObject() != 0);
370 QQuickTouchPoint *point11 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point11");
371 QQuickTouchPoint *point12 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point12");
372 QQuickTouchPoint *point21 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point21");
373 QQuickTouchPoint *point22 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point22");
374 QQuickTouchPoint *point23 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point23");
376 QCOMPARE(point11->pressed(), false);
377 QCOMPARE(point12->pressed(), false);
378 QCOMPARE(point21->pressed(), false);
379 QCOMPARE(point22->pressed(), false);
380 QCOMPARE(point23->pressed(), false);
386 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
388 sequence.press(0, p1).commit();
390 QCOMPARE(point11->pressed(), false);
391 QCOMPARE(point12->pressed(), false);
392 QCOMPARE(point21->pressed(), false);
393 QCOMPARE(point22->pressed(), false);
394 QCOMPARE(point23->pressed(), false);
396 sequence.stationary(0).press(1, p2).commit();
398 QCOMPARE(point11->pressed(), true);
399 QCOMPARE(point12->pressed(), true);
400 QCOMPARE(point21->pressed(), false);
401 QCOMPARE(point22->pressed(), false);
402 QCOMPARE(point23->pressed(), false);
404 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(100));
405 QCOMPARE(point12->x(), qreal(40)); QCOMPARE(point12->y(), qreal(100));
409 sequence.move(0, p1).move(1, p2).commit();
411 QCOMPARE(point11->pressed(), true);
412 QCOMPARE(point12->pressed(), true);
413 QCOMPARE(point21->pressed(), false);
414 QCOMPARE(point22->pressed(), false);
415 QCOMPARE(point23->pressed(), false);
417 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
418 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
420 sequence.stationary(0).stationary(1).press(2, p3).commit();
422 QCOMPARE(point11->pressed(), true);
423 QCOMPARE(point12->pressed(), true);
424 QCOMPARE(point21->pressed(), true);
425 QCOMPARE(point22->pressed(), true);
426 QCOMPARE(point23->pressed(), true);
428 //point11 should be same as point21, point12 same as point22
429 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
430 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
431 QCOMPARE(point21->x(), qreal(20)); QCOMPARE(point21->y(), qreal(110));
432 QCOMPARE(point22->x(), qreal(45)); QCOMPARE(point22->y(), qreal(100));
433 QCOMPARE(point23->x(), qreal(60)); QCOMPARE(point23->y(), qreal(180));
435 sequence.stationary(0).stationary(1).stationary(2).press(3, QPoint(80,180)).press(4, QPoint(100,180)).commit();
437 QCOMPARE(point11->pressed(), true);
438 QCOMPARE(point12->pressed(), true);
439 QCOMPARE(point21->pressed(), true);
440 QCOMPARE(point22->pressed(), true);
441 QCOMPARE(point23->pressed(), true);
443 //new touch points should be ignored (have no impact on our existing touch points)
444 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
445 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
446 QCOMPARE(point21->x(), qreal(20)); QCOMPARE(point21->y(), qreal(110));
447 QCOMPARE(point22->x(), qreal(45)); QCOMPARE(point22->y(), qreal(100));
448 QCOMPARE(point23->x(), qreal(60)); QCOMPARE(point23->y(), qreal(180));
450 sequence.stationary(0).stationary(1).stationary(2).release(3, QPoint(80,180)).release(4, QPoint(100,180)).commit();
455 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
457 QCOMPARE(point11->pressed(), true);
458 QCOMPARE(point12->pressed(), true);
459 QCOMPARE(point21->pressed(), true);
460 QCOMPARE(point22->pressed(), true);
461 QCOMPARE(point23->pressed(), true);
463 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
464 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
465 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
466 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
467 QCOMPARE(point23->x(), qreal(63)); QCOMPARE(point23->y(), qreal(180));
472 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
474 QCOMPARE(point11->pressed(), false);
475 QCOMPARE(point12->pressed(), false);
476 QCOMPARE(point21->pressed(), true);
477 QCOMPARE(point22->pressed(), true);
478 QCOMPARE(point23->pressed(), true);
480 //first two remain the same (touches now grabbed by inner touch area)
481 QCOMPARE(point11->x(), qreal(24)); QCOMPARE(point11->y(), qreal(120));
482 QCOMPARE(point12->x(), qreal(62)); QCOMPARE(point12->y(), qreal(117));
483 QCOMPARE(point21->x(), qreal(28)); QCOMPARE(point21->y(), qreal(130));
484 QCOMPARE(point22->x(), qreal(79)); QCOMPARE(point22->y(), qreal(134));
485 QCOMPARE(point23->x(), qreal(66)); QCOMPARE(point23->y(), qreal(180));
487 sequence.release(0, p1).release(1, p2).release(2, p3).commit();
489 sequence.press(0, p1).commit();
491 QCOMPARE(point11->pressed(), false);
492 QCOMPARE(point12->pressed(), false);
493 QCOMPARE(point21->pressed(), false);
494 QCOMPARE(point22->pressed(), false);
495 QCOMPARE(point23->pressed(), false);
497 sequence.release(0, p1).commit();
499 //test with grabbing turned off
500 canvas->rootObject()->setProperty("grabInnerArea", false);
502 sequence.press(0, p1).press(1, p2).press(2, p3).commit();
504 QCOMPARE(point11->pressed(), true);
505 QCOMPARE(point12->pressed(), true);
506 QCOMPARE(point21->pressed(), true);
507 QCOMPARE(point22->pressed(), true);
508 QCOMPARE(point23->pressed(), true);
513 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
515 QCOMPARE(point11->pressed(), true);
516 QCOMPARE(point12->pressed(), true);
517 QCOMPARE(point21->pressed(), true);
518 QCOMPARE(point22->pressed(), true);
519 QCOMPARE(point23->pressed(), true);
521 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
522 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
523 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
524 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
525 QCOMPARE(point23->x(), qreal(63)); QCOMPARE(point23->y(), qreal(180));
530 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
532 QCOMPARE(point11->pressed(), true);
533 QCOMPARE(point12->pressed(), true);
534 QCOMPARE(point21->pressed(), true);
535 QCOMPARE(point22->pressed(), true);
536 QCOMPARE(point23->pressed(), true);
538 //all change (touches not grabbed by inner touch area)
539 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
540 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
541 QCOMPARE(point21->x(), qreal(20)); QCOMPARE(point21->y(), qreal(110));
542 QCOMPARE(point22->x(), qreal(45)); QCOMPARE(point22->y(), qreal(100));
543 QCOMPARE(point23->x(), qreal(60)); QCOMPARE(point23->y(), qreal(180));
545 sequence.release(0, p1).release(1, p2).release(2, p3).commit();
550 void tst_QQuickMultiPointTouchArea::inFlickable()
552 QQuickView *canvas = createAndShowView("inFlickable.qml");
553 QVERIFY(canvas->rootObject() != 0);
555 QQuickFlickable *flickable = qobject_cast<QQuickFlickable *>(canvas->rootObject());
556 QVERIFY(flickable != 0);
558 QQuickTouchPoint *point11 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point1");
559 QQuickTouchPoint *point12 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point2");
561 QCOMPARE(point11->pressed(), false);
562 QCOMPARE(point12->pressed(), false);
567 //moving one point vertically
568 QTest::touchEvent(canvas, device).press(0, p1);
569 QTest::mousePress(canvas, Qt::LeftButton, 0, p1);
572 QTest::touchEvent(canvas, device).move(0, p1);
573 QTest::mouseMove(canvas, p1);
576 QTest::touchEvent(canvas, device).move(0, p1);
577 QTest::mouseMove(canvas, p1);
580 QTest::touchEvent(canvas, device).move(0, p1);
581 QTest::mouseMove(canvas, p1);
584 QTest::touchEvent(canvas, device).move(0, p1);
585 QTest::mouseMove(canvas, p1);
587 QVERIFY(flickable->contentY() < 0);
588 QCOMPARE(point11->pressed(), false);
589 QCOMPARE(point12->pressed(), false);
591 QTest::touchEvent(canvas, device).release(0, p1);
592 QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1);
595 QTRY_VERIFY(!flickable->isMoving());
597 //moving two points vertically
599 QTest::touchEvent(canvas, device).press(0, p1).press(1, p2);
600 QTest::mousePress(canvas, Qt::LeftButton, 0, p1);
602 QCOMPARE(point11->pressed(), true);
603 QCOMPARE(point12->pressed(), true);
604 QCOMPARE(flickable->property("cancelCount").toInt(), 0);
605 QCOMPARE(flickable->property("touchCount").toInt(), 2);
607 p1 += QPoint(0,15); p2 += QPoint(0,15);
608 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
609 QTest::mouseMove(canvas, p1);
611 p1 += QPoint(0,15); p2 += QPoint(0,15);
612 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
613 QTest::mouseMove(canvas, p1);
615 p1 += QPoint(0,15); p2 += QPoint(0,15);
616 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
617 QTest::mouseMove(canvas, p1);
619 p1 += QPoint(0,15); p2 += QPoint(0,15);
620 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
621 QTest::mouseMove(canvas, p1);
623 QVERIFY(flickable->contentY() < 0);
624 QCOMPARE(point11->pressed(), false);
625 QCOMPARE(point12->pressed(), false);
626 QCOMPARE(flickable->property("cancelCount").toInt(), 2);
627 QCOMPARE(flickable->property("touchCount").toInt(), 0);
629 QTest::touchEvent(canvas, device).release(0, p1).release(1, p2);
630 QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1);
633 QTRY_VERIFY(!flickable->isMoving());
635 //moving two points horizontally, then one point vertically
638 QTest::touchEvent(canvas, device).press(0, p1).press(1, p2);
639 QTest::mousePress(canvas, Qt::LeftButton, 0, p1);
641 QCOMPARE(point11->pressed(), true);
642 QCOMPARE(point12->pressed(), true);
644 p1 += QPoint(15,0); p2 += QPoint(15,0);
645 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
646 QTest::mouseMove(canvas, p1);
648 p1 += QPoint(15,0); p2 += QPoint(15,0);
649 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
650 QTest::mouseMove(canvas, p1);
652 p1 += QPoint(15,0); p2 += QPoint(15,0);
653 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
654 QTest::mouseMove(canvas, p1);
656 p1 += QPoint(15,0); p2 += QPoint(15,0);
657 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
658 QTest::mouseMove(canvas, p1);
660 p1 += QPoint(0,15); p2 += QPoint(0,15);
661 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
662 QTest::mouseMove(canvas, p1);
664 p1 += QPoint(0,15); p2 += QPoint(0,15);
665 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
666 QTest::mouseMove(canvas, p1);
668 p1 += QPoint(0,15); p2 += QPoint(0,15);
669 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
670 QTest::mouseMove(canvas, p1);
672 p1 += QPoint(0,15); p2 += QPoint(0,15);
673 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
674 QTest::mouseMove(canvas, p1);
676 QVERIFY(flickable->contentY() == 0);
677 QCOMPARE(point11->pressed(), true);
678 QCOMPARE(point12->pressed(), true);
680 QTest::touchEvent(canvas, device).release(0, p1).release(1, p2);
681 QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1);
688 void tst_QQuickMultiPointTouchArea::invisible()
690 QQuickView *canvas = createAndShowView("signalTest.qml");
691 QVERIFY(canvas->rootObject() != 0);
693 QQuickMultiPointTouchArea *area = qobject_cast<QQuickMultiPointTouchArea *>(canvas->rootObject());
696 area->setVisible(false);
701 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
703 sequence.press(0, p1).press(1, p2).commit();
705 QCOMPARE(area->property("touchPointPressCount").toInt(), 0);
706 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
707 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
708 QCOMPARE(area->property("touchCount").toInt(), 0);
714 QQuickView *tst_QQuickMultiPointTouchArea::createAndShowView(const QString &file)
716 QQuickView *canvas = new QQuickView(0);
717 canvas->setSource(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + QLatin1String("/data/") + file));
719 canvas->requestActivateWindow();
720 QTest::qWaitForWindowShown(canvas);
725 QTEST_MAIN(tst_QQuickMultiPointTouchArea)
727 #include "tst_qquickmultipointtoucharea.moc"