1 /****************************************************************************
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the test suite of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** 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();
72 QQuickView *createAndShowView(const QString &file);
76 void tst_QQuickMultiPointTouchArea::properties()
78 QQuickView *canvas = createAndShowView("properties.qml");
79 QVERIFY(canvas->rootObject() != 0);
81 QQuickMultiPointTouchArea *area = qobject_cast<QQuickMultiPointTouchArea *>(canvas->rootObject());
84 QCOMPARE(area->minimumTouchPoints(), 2);
85 QCOMPARE(area->maximumTouchPoints(), 4);
87 QDeclarativeListReference ref(area, "touchPoints");
88 QCOMPARE(ref.count(), 4);
93 void tst_QQuickMultiPointTouchArea::signalTest()
95 QQuickView *canvas = createAndShowView("signalTest.qml");
96 QVERIFY(canvas->rootObject() != 0);
98 QQuickMultiPointTouchArea *area = qobject_cast<QQuickMultiPointTouchArea *>(canvas->rootObject());
107 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
109 sequence.press(0, p1).press(1, p2).commit();
111 QCOMPARE(area->property("touchPointPressCount").toInt(), 2);
112 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
113 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
114 QCOMPARE(area->property("touchCount").toInt(), 2);
115 QMetaObject::invokeMethod(area, "clearCounts");
117 sequence.stationary(0).stationary(1).press(2, p3).commit();
119 QCOMPARE(area->property("touchPointPressCount").toInt(), 1);
120 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
121 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
122 QCOMPARE(area->property("touchCount").toInt(), 3);
123 QMetaObject::invokeMethod(area, "clearCounts");
127 sequence.move(0, p1).move(1, p2).stationary(2).commit();
129 QCOMPARE(area->property("touchPointPressCount").toInt(), 0);
130 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 2);
131 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 0);
132 QCOMPARE(area->property("touchCount").toInt(), 3);
133 QMetaObject::invokeMethod(area, "clearCounts");
136 sequence.release(0, p1).release(1, p2)
137 .move(2, p3).press(3, p4).press(4, p5).commit();
139 QCOMPARE(area->property("touchPointPressCount").toInt(), 2);
140 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 1);
141 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 2);
142 QCOMPARE(area->property("touchCount").toInt(), 3);
143 QMetaObject::invokeMethod(area, "clearCounts");
145 sequence.release(2, p3).release(3, p4).release(4, p5).commit();
147 QCOMPARE(area->property("touchPointPressCount").toInt(), 0);
148 QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0);
149 QCOMPARE(area->property("touchPointReleaseCount").toInt(), 3);
150 QCOMPARE(area->property("touchCount").toInt(), 0);
151 QMetaObject::invokeMethod(area, "clearCounts");
156 void tst_QQuickMultiPointTouchArea::release()
158 QQuickView *canvas = createAndShowView("basic.qml");
159 QVERIFY(canvas->rootObject() != 0);
161 QQuickTouchPoint *point1 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point1");
163 QCOMPARE(point1->pressed(), false);
167 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
169 sequence.press(0, p1).commit();
171 QCOMPARE(point1->pressed(), true);
175 sequence.move(0, p1).commit();
177 QCOMPARE(point1->pressed(), true);
178 QCOMPARE(point1->x(), qreal(20)); QCOMPARE(point1->y(), qreal(110));
182 sequence.release(0, p1).commit();
184 //test that a release without a prior move to the release position successfully updates the point's position
185 QCOMPARE(point1->pressed(), false);
186 QCOMPARE(point1->x(), qreal(24)); QCOMPARE(point1->y(), qreal(120));
191 void tst_QQuickMultiPointTouchArea::reuse()
193 QQuickView *canvas = createAndShowView("basic.qml");
194 QVERIFY(canvas->rootObject() != 0);
196 QQuickTouchPoint *point1 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point1");
197 QQuickTouchPoint *point2 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point2");
198 QQuickTouchPoint *point3 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point3");
200 QCOMPARE(point1->pressed(), false);
201 QCOMPARE(point2->pressed(), false);
208 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
210 sequence.press(0, p1).press(1, p2).commit();
212 QCOMPARE(point1->pressed(), true);
213 QCOMPARE(point2->pressed(), true);
214 QCOMPARE(point3->pressed(), false);
216 sequence.release(0, p1).stationary(1).press(2, p3).commit();
218 //we shouldn't reuse point 1 yet
219 QCOMPARE(point1->pressed(), false);
220 QCOMPARE(point2->pressed(), true);
221 QCOMPARE(point3->pressed(), true);
223 //back to base state (no touches)
224 sequence.release(1, p2).release(2, p3).commit();
226 QCOMPARE(point1->pressed(), false);
227 QCOMPARE(point2->pressed(), false);
228 QCOMPARE(point3->pressed(), false);
230 sequence.press(0, p1).press(1, p2).commit();
232 QCOMPARE(point1->pressed(), true);
233 QCOMPARE(point2->pressed(), true);
234 QCOMPARE(point3->pressed(), false);
236 sequence.release(0, p1).stationary(1).commit();
238 QCOMPARE(point1->pressed(), false);
239 QCOMPARE(point2->pressed(), true);
240 QCOMPARE(point3->pressed(), false);
242 sequence.press(4, p4).stationary(1).commit();
244 //the new touch point should reuse point 1
245 QCOMPARE(point1->pressed(), true);
246 QCOMPARE(point2->pressed(), true);
247 QCOMPARE(point3->pressed(), false);
249 QCOMPARE(point1->x(), qreal(80)); QCOMPARE(point1->y(), qreal(100));
254 void tst_QQuickMultiPointTouchArea::nonOverlapping()
256 QQuickView *canvas = createAndShowView("nonOverlapping.qml");
257 QVERIFY(canvas->rootObject() != 0);
259 QQuickTouchPoint *point11 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point11");
260 QQuickTouchPoint *point12 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point12");
261 QQuickTouchPoint *point21 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point21");
262 QQuickTouchPoint *point22 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point22");
263 QQuickTouchPoint *point23 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point23");
265 QCOMPARE(point11->pressed(), false);
266 QCOMPARE(point12->pressed(), false);
267 QCOMPARE(point21->pressed(), false);
268 QCOMPARE(point22->pressed(), false);
269 QCOMPARE(point23->pressed(), false);
277 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
279 sequence.press(0, p1).commit();
281 QCOMPARE(point11->pressed(), false);
282 QCOMPARE(point12->pressed(), false);
283 QCOMPARE(point21->pressed(), false);
284 QCOMPARE(point22->pressed(), false);
285 QCOMPARE(point23->pressed(), false);
287 sequence.stationary(0).press(1, p2).commit();
289 QCOMPARE(point11->pressed(), true);
290 QCOMPARE(point12->pressed(), true);
291 QCOMPARE(point21->pressed(), false);
292 QCOMPARE(point22->pressed(), false);
293 QCOMPARE(point23->pressed(), false);
295 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(100));
296 QCOMPARE(point12->x(), qreal(40)); QCOMPARE(point12->y(), qreal(100));
300 sequence.move(0, p1).move(1, p2).commit();
302 QCOMPARE(point11->pressed(), true);
303 QCOMPARE(point12->pressed(), true);
304 QCOMPARE(point21->pressed(), false);
305 QCOMPARE(point22->pressed(), false);
306 QCOMPARE(point23->pressed(), false);
308 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
309 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
311 sequence.stationary(0).stationary(1).press(2, p3).commit();
313 QCOMPARE(point11->pressed(), true);
314 QCOMPARE(point12->pressed(), true);
315 QCOMPARE(point21->pressed(), false);
316 QCOMPARE(point22->pressed(), false);
317 QCOMPARE(point23->pressed(), false);
319 sequence.stationary(0).stationary(1).stationary(2).press(3, p4).press(4, p5).commit();
321 QCOMPARE(point11->pressed(), true);
322 QCOMPARE(point12->pressed(), true);
323 QCOMPARE(point21->pressed(), true);
324 QCOMPARE(point22->pressed(), true);
325 QCOMPARE(point23->pressed(), true);
327 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
328 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
329 QCOMPARE(point21->x(), qreal(60)); QCOMPARE(point21->y(), qreal(20));
330 QCOMPARE(point22->x(), qreal(80)); QCOMPARE(point22->y(), qreal(20));
331 QCOMPARE(point23->x(), qreal(100)); QCOMPARE(point23->y(), qreal(20));
338 sequence.move(0, p1).move(1, p2).move(2, p3).move(3, p4).move(4, p5).commit();
340 QCOMPARE(point11->pressed(), true);
341 QCOMPARE(point12->pressed(), true);
342 QCOMPARE(point21->pressed(), true);
343 QCOMPARE(point22->pressed(), true);
344 QCOMPARE(point23->pressed(), true);
346 QCOMPARE(point11->x(), qreal(24)); QCOMPARE(point11->y(), qreal(120));
347 QCOMPARE(point12->x(), qreal(62)); QCOMPARE(point12->y(), qreal(117));
348 QCOMPARE(point21->x(), qreal(63)); QCOMPARE(point21->y(), qreal(20));
349 QCOMPARE(point22->x(), qreal(81)); QCOMPARE(point22->y(), qreal(19));
350 QCOMPARE(point23->x(), qreal(93)); QCOMPARE(point23->y(), qreal(30));
352 sequence.release(0, p1).release(1, p2).release(2, p3).release(3, p4).release(4, p5).commit();
354 QCOMPARE(point11->pressed(), false);
355 QCOMPARE(point12->pressed(), false);
356 QCOMPARE(point21->pressed(), false);
357 QCOMPARE(point22->pressed(), false);
358 QCOMPARE(point23->pressed(), false);
363 void tst_QQuickMultiPointTouchArea::nested()
365 QQuickView *canvas = createAndShowView("nested.qml");
366 QVERIFY(canvas->rootObject() != 0);
368 QQuickTouchPoint *point11 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point11");
369 QQuickTouchPoint *point12 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point12");
370 QQuickTouchPoint *point21 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point21");
371 QQuickTouchPoint *point22 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point22");
372 QQuickTouchPoint *point23 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point23");
374 QCOMPARE(point11->pressed(), false);
375 QCOMPARE(point12->pressed(), false);
376 QCOMPARE(point21->pressed(), false);
377 QCOMPARE(point22->pressed(), false);
378 QCOMPARE(point23->pressed(), false);
384 QTest::QTouchEventSequence sequence = QTest::touchEvent(canvas, device);
386 sequence.press(0, p1).commit();
388 QCOMPARE(point11->pressed(), false);
389 QCOMPARE(point12->pressed(), false);
390 QCOMPARE(point21->pressed(), false);
391 QCOMPARE(point22->pressed(), false);
392 QCOMPARE(point23->pressed(), false);
394 sequence.stationary(0).press(1, p2).commit();
396 QCOMPARE(point11->pressed(), true);
397 QCOMPARE(point12->pressed(), true);
398 QCOMPARE(point21->pressed(), false);
399 QCOMPARE(point22->pressed(), false);
400 QCOMPARE(point23->pressed(), false);
402 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(100));
403 QCOMPARE(point12->x(), qreal(40)); QCOMPARE(point12->y(), qreal(100));
407 sequence.move(0, p1).move(1, p2).commit();
409 QCOMPARE(point11->pressed(), true);
410 QCOMPARE(point12->pressed(), true);
411 QCOMPARE(point21->pressed(), false);
412 QCOMPARE(point22->pressed(), false);
413 QCOMPARE(point23->pressed(), false);
415 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
416 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
418 sequence.stationary(0).stationary(1).press(2, p3).commit();
420 QCOMPARE(point11->pressed(), true);
421 QCOMPARE(point12->pressed(), true);
422 QCOMPARE(point21->pressed(), true);
423 QCOMPARE(point22->pressed(), true);
424 QCOMPARE(point23->pressed(), true);
426 //point11 should be same as point21, point12 same as point22
427 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
428 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
429 QCOMPARE(point21->x(), qreal(20)); QCOMPARE(point21->y(), qreal(110));
430 QCOMPARE(point22->x(), qreal(45)); QCOMPARE(point22->y(), qreal(100));
431 QCOMPARE(point23->x(), qreal(60)); QCOMPARE(point23->y(), qreal(180));
433 sequence.stationary(0).stationary(1).stationary(2).press(3, QPoint(80,180)).press(4, QPoint(100,180)).commit();
435 QCOMPARE(point11->pressed(), true);
436 QCOMPARE(point12->pressed(), true);
437 QCOMPARE(point21->pressed(), true);
438 QCOMPARE(point22->pressed(), true);
439 QCOMPARE(point23->pressed(), true);
441 //new touch points should be ignored (have no impact on our existing touch points)
442 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
443 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
444 QCOMPARE(point21->x(), qreal(20)); QCOMPARE(point21->y(), qreal(110));
445 QCOMPARE(point22->x(), qreal(45)); QCOMPARE(point22->y(), qreal(100));
446 QCOMPARE(point23->x(), qreal(60)); QCOMPARE(point23->y(), qreal(180));
448 sequence.stationary(0).stationary(1).stationary(2).release(3, QPoint(80,180)).release(4, QPoint(100,180)).commit();
453 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
455 QCOMPARE(point11->pressed(), true);
456 QCOMPARE(point12->pressed(), true);
457 QCOMPARE(point21->pressed(), true);
458 QCOMPARE(point22->pressed(), true);
459 QCOMPARE(point23->pressed(), true);
461 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
462 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
463 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
464 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
465 QCOMPARE(point23->x(), qreal(63)); QCOMPARE(point23->y(), qreal(180));
470 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
472 QCOMPARE(point11->pressed(), false);
473 QCOMPARE(point12->pressed(), false);
474 QCOMPARE(point21->pressed(), true);
475 QCOMPARE(point22->pressed(), true);
476 QCOMPARE(point23->pressed(), true);
478 //first two remain the same (touches now grabbed by inner touch area)
479 QCOMPARE(point11->x(), qreal(24)); QCOMPARE(point11->y(), qreal(120));
480 QCOMPARE(point12->x(), qreal(62)); QCOMPARE(point12->y(), qreal(117));
481 QCOMPARE(point21->x(), qreal(28)); QCOMPARE(point21->y(), qreal(130));
482 QCOMPARE(point22->x(), qreal(79)); QCOMPARE(point22->y(), qreal(134));
483 QCOMPARE(point23->x(), qreal(66)); QCOMPARE(point23->y(), qreal(180));
485 sequence.release(0, p1).release(1, p2).release(2, p3).commit();
487 sequence.press(0, p1).commit();
489 QCOMPARE(point11->pressed(), false);
490 QCOMPARE(point12->pressed(), false);
491 QCOMPARE(point21->pressed(), false);
492 QCOMPARE(point22->pressed(), false);
493 QCOMPARE(point23->pressed(), false);
495 sequence.release(0, p1).commit();
497 //test with grabbing turned off
498 canvas->rootObject()->setProperty("grabInnerArea", false);
500 sequence.press(0, p1).press(1, p2).press(2, p3).commit();
502 QCOMPARE(point11->pressed(), true);
503 QCOMPARE(point12->pressed(), true);
504 QCOMPARE(point21->pressed(), true);
505 QCOMPARE(point22->pressed(), true);
506 QCOMPARE(point23->pressed(), true);
511 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
513 QCOMPARE(point11->pressed(), true);
514 QCOMPARE(point12->pressed(), true);
515 QCOMPARE(point21->pressed(), true);
516 QCOMPARE(point22->pressed(), true);
517 QCOMPARE(point23->pressed(), true);
519 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
520 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
521 QCOMPARE(point21->x(), qreal(24)); QCOMPARE(point21->y(), qreal(120));
522 QCOMPARE(point22->x(), qreal(62)); QCOMPARE(point22->y(), qreal(117));
523 QCOMPARE(point23->x(), qreal(63)); QCOMPARE(point23->y(), qreal(180));
528 sequence.move(0, p1).move(1, p2).move(2, p3).commit();
530 QCOMPARE(point11->pressed(), true);
531 QCOMPARE(point12->pressed(), true);
532 QCOMPARE(point21->pressed(), true);
533 QCOMPARE(point22->pressed(), true);
534 QCOMPARE(point23->pressed(), true);
536 //all change (touches not grabbed by inner touch area)
537 QCOMPARE(point11->x(), qreal(20)); QCOMPARE(point11->y(), qreal(110));
538 QCOMPARE(point12->x(), qreal(45)); QCOMPARE(point12->y(), qreal(100));
539 QCOMPARE(point21->x(), qreal(20)); QCOMPARE(point21->y(), qreal(110));
540 QCOMPARE(point22->x(), qreal(45)); QCOMPARE(point22->y(), qreal(100));
541 QCOMPARE(point23->x(), qreal(60)); QCOMPARE(point23->y(), qreal(180));
543 sequence.release(0, p1).release(1, p2).release(2, p3).commit();
548 void tst_QQuickMultiPointTouchArea::inFlickable()
550 QQuickView *canvas = createAndShowView("inFlickable.qml");
551 QVERIFY(canvas->rootObject() != 0);
553 QQuickFlickable *flickable = qobject_cast<QQuickFlickable *>(canvas->rootObject());
554 QVERIFY(flickable != 0);
556 QQuickTouchPoint *point11 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point1");
557 QQuickTouchPoint *point12 = canvas->rootObject()->findChild<QQuickTouchPoint*>("point2");
559 QCOMPARE(point11->pressed(), false);
560 QCOMPARE(point12->pressed(), false);
565 //moving one point vertically
566 QTest::touchEvent(canvas, device).press(0, p1);
567 QTest::mousePress(canvas, Qt::LeftButton, 0, p1);
570 QTest::touchEvent(canvas, device).move(0, p1);
571 QTest::mouseMove(canvas, p1);
574 QTest::touchEvent(canvas, device).move(0, p1);
575 QTest::mouseMove(canvas, p1);
578 QTest::touchEvent(canvas, device).move(0, p1);
579 QTest::mouseMove(canvas, p1);
582 QTest::touchEvent(canvas, device).move(0, p1);
583 QTest::mouseMove(canvas, p1);
585 QVERIFY(flickable->contentY() < 0);
586 QCOMPARE(point11->pressed(), false);
587 QCOMPARE(point12->pressed(), false);
589 QTest::touchEvent(canvas, device).release(0, p1);
590 QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1);
593 QTRY_VERIFY(!flickable->isMoving());
595 //moving two points vertically
597 QTest::touchEvent(canvas, device).press(0, p1).press(1, p2);
598 QTest::mousePress(canvas, Qt::LeftButton, 0, p1);
600 QCOMPARE(point11->pressed(), true);
601 QCOMPARE(point12->pressed(), true);
603 p1 += QPoint(0,15); p2 += QPoint(0,15);
604 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
605 QTest::mouseMove(canvas, p1);
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 QVERIFY(flickable->contentY() < 0);
620 QCOMPARE(point11->pressed(), false);
621 QCOMPARE(point12->pressed(), false);
623 QTest::touchEvent(canvas, device).release(0, p1).release(1, p2);
624 QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1);
627 QTRY_VERIFY(!flickable->isMoving());
629 //moving two points horizontally, then one point vertically
632 QTest::touchEvent(canvas, device).press(0, p1).press(1, p2);
633 QTest::mousePress(canvas, Qt::LeftButton, 0, p1);
635 QCOMPARE(point11->pressed(), true);
636 QCOMPARE(point12->pressed(), true);
638 p1 += QPoint(15,0); p2 += QPoint(15,0);
639 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
640 QTest::mouseMove(canvas, p1);
642 p1 += QPoint(15,0); p2 += QPoint(15,0);
643 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
644 QTest::mouseMove(canvas, p1);
646 p1 += QPoint(15,0); p2 += QPoint(15,0);
647 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
648 QTest::mouseMove(canvas, p1);
650 p1 += QPoint(15,0); p2 += QPoint(15,0);
651 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
652 QTest::mouseMove(canvas, p1);
654 p1 += QPoint(0,15); p2 += QPoint(0,15);
655 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
656 QTest::mouseMove(canvas, p1);
658 p1 += QPoint(0,15); p2 += QPoint(0,15);
659 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
660 QTest::mouseMove(canvas, p1);
662 p1 += QPoint(0,15); p2 += QPoint(0,15);
663 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
664 QTest::mouseMove(canvas, p1);
666 p1 += QPoint(0,15); p2 += QPoint(0,15);
667 QTest::touchEvent(canvas, device).move(0, p1).move(1, p2);
668 QTest::mouseMove(canvas, p1);
670 QVERIFY(flickable->contentY() == 0);
671 QCOMPARE(point11->pressed(), true);
672 QCOMPARE(point12->pressed(), true);
674 QTest::touchEvent(canvas, device).release(0, p1).release(1, p2);
675 QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1);
681 QQuickView *tst_QQuickMultiPointTouchArea::createAndShowView(const QString &file)
683 QQuickView *canvas = new QQuickView(0);
684 canvas->setSource(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + QLatin1String("/data/") + file));
686 canvas->requestActivateWindow();
687 QTest::qWaitForWindowShown(canvas);
692 QTEST_MAIN(tst_QQuickMultiPointTouchArea)
694 #include "tst_qquickmultipointtoucharea.moc"