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 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #include <QtTest/QtTest>
43 #include <QtTest/QSignalSpy>
44 #include <private/qdeclarativemousearea_p.h>
45 #include <private/qdeclarativerectangle_p.h>
46 #include <private/qdeclarativeflickable_p.h>
47 #include <QtDeclarative/qdeclarativeview.h>
48 #include <QtDeclarative/qdeclarativecontext.h>
49 #include <QtDeclarative/qdeclarativeengine.h>
52 // In Symbian OS test data is located in applications private dir
56 class tst_QDeclarativeMouseArea: public QObject
60 void dragProperties();
63 void updateMouseAreaPosOnClick();
64 void updateMouseAreaPosOnResize();
65 void noOnClickedWithPressAndHold();
66 void onMousePressRejected();
69 void pressedOrdering();
70 void preventStealing();
71 void testQtQuick11Attributes();
72 void testQtQuick11Attributes_data();
75 QDeclarativeView *createView();
78 void tst_QDeclarativeMouseArea::dragProperties()
80 QDeclarativeView *canvas = createView();
81 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/dragproperties.qml"));
84 QVERIFY(canvas->rootObject() != 0);
86 QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion");
87 QDeclarativeDrag *drag = mouseRegion->drag();
88 QVERIFY(mouseRegion != 0);
92 QDeclarativeItem *blackRect = canvas->rootObject()->findChild<QDeclarativeItem*>("blackrect");
93 QVERIFY(blackRect != 0);
94 QVERIFY(blackRect == drag->target());
95 QDeclarativeItem *rootItem = qobject_cast<QDeclarativeItem*>(canvas->rootObject());
96 QVERIFY(rootItem != 0);
97 QSignalSpy targetSpy(drag, SIGNAL(targetChanged()));
98 drag->setTarget(rootItem);
99 QCOMPARE(targetSpy.count(),1);
100 drag->setTarget(rootItem);
101 QCOMPARE(targetSpy.count(),1);
104 QCOMPARE(drag->axis(), QDeclarativeDrag::XandYAxis);
105 QSignalSpy axisSpy(drag, SIGNAL(axisChanged()));
106 drag->setAxis(QDeclarativeDrag::XAxis);
107 QCOMPARE(drag->axis(), QDeclarativeDrag::XAxis);
108 QCOMPARE(axisSpy.count(),1);
109 drag->setAxis(QDeclarativeDrag::XAxis);
110 QCOMPARE(axisSpy.count(),1);
112 // minimum and maximum properties
113 QSignalSpy xminSpy(drag, SIGNAL(minimumXChanged()));
114 QSignalSpy xmaxSpy(drag, SIGNAL(maximumXChanged()));
115 QSignalSpy yminSpy(drag, SIGNAL(minimumYChanged()));
116 QSignalSpy ymaxSpy(drag, SIGNAL(maximumYChanged()));
118 QCOMPARE(drag->xmin(), 0.0);
119 QCOMPARE(drag->xmax(), rootItem->width()-blackRect->width());
120 QCOMPARE(drag->ymin(), 0.0);
121 QCOMPARE(drag->ymax(), rootItem->height()-blackRect->height());
128 QCOMPARE(drag->xmin(), 10.0);
129 QCOMPARE(drag->xmax(), 10.0);
130 QCOMPARE(drag->ymin(), 10.0);
131 QCOMPARE(drag->ymax(), 10.0);
133 QCOMPARE(xminSpy.count(),1);
134 QCOMPARE(xmaxSpy.count(),1);
135 QCOMPARE(yminSpy.count(),1);
136 QCOMPARE(ymaxSpy.count(),1);
143 QCOMPARE(xminSpy.count(),1);
144 QCOMPARE(xmaxSpy.count(),1);
145 QCOMPARE(yminSpy.count(),1);
146 QCOMPARE(ymaxSpy.count(),1);
149 QSignalSpy filterChildrenSpy(drag, SIGNAL(filterChildrenChanged()));
151 drag->setFilterChildren(true);
153 QVERIFY(drag->filterChildren());
154 QCOMPARE(filterChildrenSpy.count(), 1);
156 drag->setFilterChildren(true);
157 QCOMPARE(filterChildrenSpy.count(), 1);
162 void tst_QDeclarativeMouseArea::resetDrag()
164 QDeclarativeView *canvas = createView();
166 canvas->rootContext()->setContextProperty("haveTarget", QVariant(true));
167 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/dragreset.qml"));
170 QVERIFY(canvas->rootObject() != 0);
172 QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion");
173 QDeclarativeDrag *drag = mouseRegion->drag();
174 QVERIFY(mouseRegion != 0);
178 QDeclarativeItem *blackRect = canvas->rootObject()->findChild<QDeclarativeItem*>("blackrect");
179 QVERIFY(blackRect != 0);
180 QVERIFY(blackRect == drag->target());
181 QDeclarativeItem *rootItem = qobject_cast<QDeclarativeItem*>(canvas->rootObject());
182 QVERIFY(rootItem != 0);
183 QSignalSpy targetSpy(drag, SIGNAL(targetChanged()));
184 QVERIFY(drag->target() != 0);
185 canvas->rootContext()->setContextProperty("haveTarget", QVariant(false));
186 QCOMPARE(targetSpy.count(),1);
187 QVERIFY(drag->target() == 0);
193 void tst_QDeclarativeMouseArea::dragging()
195 QDeclarativeView *canvas = createView();
197 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/dragging.qml"));
200 QVERIFY(canvas->rootObject() != 0);
202 QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion");
203 QDeclarativeDrag *drag = mouseRegion->drag();
204 QVERIFY(mouseRegion != 0);
208 QDeclarativeItem *blackRect = canvas->rootObject()->findChild<QDeclarativeItem*>("blackrect");
209 QVERIFY(blackRect != 0);
210 QVERIFY(blackRect == drag->target());
212 QVERIFY(!drag->active());
214 QGraphicsScene *scene = canvas->scene();
215 QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
216 pressEvent.setScenePos(QPointF(100, 100));
217 pressEvent.setButton(Qt::LeftButton);
218 pressEvent.setButtons(Qt::LeftButton);
219 QApplication::sendEvent(scene, &pressEvent);
221 QVERIFY(!drag->active());
222 QCOMPARE(blackRect->x(), 50.0);
223 QCOMPARE(blackRect->y(), 50.0);
225 // First move event triggers drag, second is acted upon.
226 // This is due to possibility of higher stacked area taking precedence.
227 QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove);
228 moveEvent.setScenePos(QPointF(106, 106));
229 moveEvent.setButton(Qt::LeftButton);
230 moveEvent.setButtons(Qt::LeftButton);
231 QApplication::sendEvent(scene, &moveEvent);
233 moveEvent.setScenePos(QPointF(110, 110));
234 moveEvent.setButton(Qt::LeftButton);
235 moveEvent.setButtons(Qt::LeftButton);
236 QApplication::sendEvent(scene, &moveEvent);
238 QVERIFY(drag->active());
239 QCOMPARE(blackRect->x(), 60.0);
240 QCOMPARE(blackRect->y(), 60.0);
242 QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
243 releaseEvent.setScenePos(QPointF(110, 110));
244 releaseEvent.setButton(Qt::LeftButton);
245 releaseEvent.setButtons(Qt::LeftButton);
246 QApplication::sendEvent(scene, &releaseEvent);
248 QVERIFY(!drag->active());
249 QCOMPARE(blackRect->x(), 60.0);
250 QCOMPARE(blackRect->y(), 60.0);
255 QDeclarativeView *tst_QDeclarativeMouseArea::createView()
257 QDeclarativeView *canvas = new QDeclarativeView(0);
258 canvas->setFixedSize(240,320);
263 void tst_QDeclarativeMouseArea::updateMouseAreaPosOnClick()
265 QDeclarativeView *canvas = createView();
266 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/updateMousePosOnClick.qml"));
269 QVERIFY(canvas->rootObject() != 0);
271 QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion");
272 QVERIFY(mouseRegion != 0);
274 QDeclarativeRectangle *rect = canvas->rootObject()->findChild<QDeclarativeRectangle*>("ball");
277 QCOMPARE(mouseRegion->mouseX(), rect->x());
278 QCOMPARE(mouseRegion->mouseY(), rect->y());
280 QGraphicsScene *scene = canvas->scene();
281 QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
282 event.setScenePos(QPointF(100, 100));
283 event.setButton(Qt::LeftButton);
284 event.setButtons(Qt::LeftButton);
285 QApplication::sendEvent(scene, &event);
287 QCOMPARE(mouseRegion->mouseX(), 100.0);
288 QCOMPARE(mouseRegion->mouseY(), 100.0);
290 QCOMPARE(mouseRegion->mouseX(), rect->x());
291 QCOMPARE(mouseRegion->mouseY(), rect->y());
296 void tst_QDeclarativeMouseArea::updateMouseAreaPosOnResize()
298 QDeclarativeView *canvas = createView();
299 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/updateMousePosOnResize.qml"));
302 QVERIFY(canvas->rootObject() != 0);
304 QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion");
305 QVERIFY(mouseRegion != 0);
307 QDeclarativeRectangle *rect = canvas->rootObject()->findChild<QDeclarativeRectangle*>("brother");
310 QCOMPARE(mouseRegion->mouseX(), 0.0);
311 QCOMPARE(mouseRegion->mouseY(), 0.0);
313 QGraphicsScene *scene = canvas->scene();
314 QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
315 event.setScenePos(rect->pos());
316 event.setButton(Qt::LeftButton);
317 event.setButtons(Qt::LeftButton);
318 QApplication::sendEvent(scene, &event);
320 QVERIFY(!mouseRegion->property("emitPositionChanged").toBool());
321 QVERIFY(mouseRegion->property("mouseMatchesPos").toBool());
323 QCOMPARE(mouseRegion->property("x1").toInt(), 0);
324 QCOMPARE(mouseRegion->property("y1").toInt(), 0);
326 // XXX: is it on purpose that mouseX is real and mouse.x is int?
327 QCOMPARE(mouseRegion->property("x2").toInt(), (int) rect->x());
328 QCOMPARE(mouseRegion->property("y2").toInt(), (int) rect->y());
330 QCOMPARE(mouseRegion->mouseX(), rect->x());
331 QCOMPARE(mouseRegion->mouseY(), rect->y());
336 void tst_QDeclarativeMouseArea::noOnClickedWithPressAndHold()
338 QDeclarativeView *canvas = createView();
339 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/clickandhold.qml"));
342 QVERIFY(canvas->rootObject() != 0);
344 QGraphicsScene *scene = canvas->scene();
345 QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
346 pressEvent.setScenePos(QPointF(100, 100));
347 pressEvent.setButton(Qt::LeftButton);
348 pressEvent.setButtons(Qt::LeftButton);
349 QApplication::sendEvent(scene, &pressEvent);
351 QVERIFY(!canvas->rootObject()->property("clicked").toBool());
352 QVERIFY(!canvas->rootObject()->property("held").toBool());
356 QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
357 releaseEvent.setScenePos(QPointF(100, 100));
358 releaseEvent.setButton(Qt::LeftButton);
359 releaseEvent.setButtons(Qt::LeftButton);
360 QApplication::sendEvent(scene, &releaseEvent);
362 QVERIFY(!canvas->rootObject()->property("clicked").toBool());
363 QVERIFY(canvas->rootObject()->property("held").toBool());
368 void tst_QDeclarativeMouseArea::onMousePressRejected()
370 QDeclarativeView *canvas = createView();
371 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/rejectEvent.qml"));
374 QVERIFY(canvas->rootObject() != 0);
375 QVERIFY(canvas->rootObject()->property("enabled").toBool());
377 QVERIFY(!canvas->rootObject()->property("mr1_pressed").toBool());
378 QVERIFY(!canvas->rootObject()->property("mr1_released").toBool());
379 QVERIFY(!canvas->rootObject()->property("mr1_canceled").toBool());
380 QVERIFY(!canvas->rootObject()->property("mr2_pressed").toBool());
381 QVERIFY(!canvas->rootObject()->property("mr2_released").toBool());
382 QVERIFY(!canvas->rootObject()->property("mr2_canceled").toBool());
384 QGraphicsScene *scene = canvas->scene();
385 QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
386 pressEvent.setScenePos(QPointF(100, 100));
387 pressEvent.setButton(Qt::LeftButton);
388 pressEvent.setButtons(Qt::LeftButton);
389 QApplication::sendEvent(scene, &pressEvent);
391 QVERIFY(canvas->rootObject()->property("mr1_pressed").toBool());
392 QVERIFY(!canvas->rootObject()->property("mr1_released").toBool());
393 QVERIFY(!canvas->rootObject()->property("mr1_canceled").toBool());
394 QVERIFY(canvas->rootObject()->property("mr2_pressed").toBool());
395 QVERIFY(!canvas->rootObject()->property("mr2_released").toBool());
396 QVERIFY(canvas->rootObject()->property("mr2_canceled").toBool());
400 QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
401 releaseEvent.setScenePos(QPointF(100, 100));
402 releaseEvent.setButton(Qt::LeftButton);
403 releaseEvent.setButtons(Qt::LeftButton);
404 QApplication::sendEvent(scene, &releaseEvent);
406 QVERIFY(canvas->rootObject()->property("mr1_released").toBool());
407 QVERIFY(!canvas->rootObject()->property("mr1_canceled").toBool());
408 QVERIFY(!canvas->rootObject()->property("mr2_released").toBool());
413 void tst_QDeclarativeMouseArea::doubleClick()
415 QDeclarativeView *canvas = createView();
416 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/doubleclick.qml"));
419 QVERIFY(canvas->rootObject() != 0);
421 QGraphicsScene *scene = canvas->scene();
422 QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
423 pressEvent.setScenePos(QPointF(100, 100));
424 pressEvent.setButton(Qt::LeftButton);
425 pressEvent.setButtons(Qt::LeftButton);
426 QApplication::sendEvent(scene, &pressEvent);
428 QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
429 releaseEvent.setScenePos(QPointF(100, 100));
430 releaseEvent.setButton(Qt::LeftButton);
431 releaseEvent.setButtons(Qt::LeftButton);
432 QApplication::sendEvent(scene, &releaseEvent);
434 QCOMPARE(canvas->rootObject()->property("released").toInt(), 1);
436 QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
437 dblClickEvent.setScenePos(QPointF(100, 100));
438 dblClickEvent.setButton(Qt::LeftButton);
439 dblClickEvent.setButtons(Qt::LeftButton);
440 QApplication::sendEvent(scene, &dblClickEvent);
442 QApplication::sendEvent(scene, &releaseEvent);
444 QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
445 QCOMPARE(canvas->rootObject()->property("doubleClicked").toInt(), 1);
446 QCOMPARE(canvas->rootObject()->property("released").toInt(), 2);
452 void tst_QDeclarativeMouseArea::clickTwice()
454 QDeclarativeView *canvas = createView();
455 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/clicktwice.qml"));
458 QVERIFY(canvas->rootObject() != 0);
460 QGraphicsScene *scene = canvas->scene();
461 QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
462 pressEvent.setScenePos(QPointF(100, 100));
463 pressEvent.setButton(Qt::LeftButton);
464 pressEvent.setButtons(Qt::LeftButton);
465 QApplication::sendEvent(scene, &pressEvent);
467 QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
468 releaseEvent.setScenePos(QPointF(100, 100));
469 releaseEvent.setButton(Qt::LeftButton);
470 releaseEvent.setButtons(Qt::LeftButton);
471 QApplication::sendEvent(scene, &releaseEvent);
473 QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 1);
474 QCOMPARE(canvas->rootObject()->property("released").toInt(), 1);
475 QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
477 QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
478 dblClickEvent.setScenePos(QPointF(100, 100));
479 dblClickEvent.setButton(Qt::LeftButton);
480 dblClickEvent.setButtons(Qt::LeftButton);
481 QApplication::sendEvent(scene, &dblClickEvent);
483 QApplication::sendEvent(scene, &pressEvent);
484 QApplication::sendEvent(scene, &releaseEvent);
486 QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 2);
487 QCOMPARE(canvas->rootObject()->property("released").toInt(), 2);
488 QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 2);
493 void tst_QDeclarativeMouseArea::pressedOrdering()
495 QDeclarativeView *canvas = createView();
496 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/pressedOrdering.qml"));
499 QVERIFY(canvas->rootObject() != 0);
501 QCOMPARE(canvas->rootObject()->property("value").toString(), QLatin1String("base"));
503 QGraphicsScene *scene = canvas->scene();
504 QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
505 pressEvent.setScenePos(QPointF(100, 100));
506 pressEvent.setButton(Qt::LeftButton);
507 pressEvent.setButtons(Qt::LeftButton);
508 QApplication::sendEvent(scene, &pressEvent);
510 QCOMPARE(canvas->rootObject()->property("value").toString(), QLatin1String("pressed"));
512 QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
513 releaseEvent.setScenePos(QPointF(100, 100));
514 releaseEvent.setButton(Qt::LeftButton);
515 releaseEvent.setButtons(Qt::LeftButton);
516 QApplication::sendEvent(scene, &releaseEvent);
518 QCOMPARE(canvas->rootObject()->property("value").toString(), QLatin1String("toggled"));
520 QApplication::sendEvent(scene, &pressEvent);
522 QCOMPARE(canvas->rootObject()->property("value").toString(), QLatin1String("pressed"));
527 void tst_QDeclarativeMouseArea::preventStealing()
529 QDeclarativeView *canvas = createView();
531 canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/preventstealing.qml"));
534 QVERIFY(canvas->rootObject() != 0);
536 QDeclarativeFlickable *flickable = qobject_cast<QDeclarativeFlickable*>(canvas->rootObject());
537 QVERIFY(flickable != 0);
539 QDeclarativeMouseArea *mouseArea = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mousearea");
540 QVERIFY(mouseArea != 0);
542 QSignalSpy mousePositionSpy(mouseArea, SIGNAL(positionChanged(QDeclarativeMouseEvent*)));
544 QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(80, 80)));
546 // Without preventStealing, mouse movement over MouseArea would
547 // cause the Flickable to steal mouse and trigger content movement.
548 QGraphicsScene *scene = canvas->scene();
549 QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove);
550 moveEvent.setScenePos(QPointF(70, 70));
551 moveEvent.setButton(Qt::LeftButton);
552 moveEvent.setButtons(Qt::LeftButton);
553 QApplication::sendEvent(scene, &moveEvent);
555 moveEvent.setScenePos(QPointF(60, 60));
556 moveEvent.setButton(Qt::LeftButton);
557 moveEvent.setButtons(Qt::LeftButton);
558 QApplication::sendEvent(scene, &moveEvent);
560 moveEvent.setScenePos(QPointF(50, 50));
561 moveEvent.setButton(Qt::LeftButton);
562 moveEvent.setButtons(Qt::LeftButton);
563 QApplication::sendEvent(scene, &moveEvent);
565 // We should have received all three move events
566 QCOMPARE(mousePositionSpy.count(), 3);
567 QVERIFY(mouseArea->pressed());
569 // Flickable content should not have moved.
570 QCOMPARE(flickable->contentX(), 0.);
571 QCOMPARE(flickable->contentY(), 0.);
573 QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(50, 50)));
575 // Now allow stealing and confirm Flickable does its thing.
576 canvas->rootObject()->setProperty("stealing", false);
578 QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(80, 80)));
580 // Without preventStealing, mouse movement over MouseArea would
581 // cause the Flickable to steal mouse and trigger content movement.
582 moveEvent.setScenePos(QPointF(70, 70));
583 QApplication::sendEvent(scene, &moveEvent);
585 moveEvent.setScenePos(QPointF(60, 60));
586 QApplication::sendEvent(scene, &moveEvent);
588 moveEvent.setScenePos(QPointF(50, 50));
589 QApplication::sendEvent(scene, &moveEvent);
591 // We should only have received the first move event
592 QCOMPARE(mousePositionSpy.count(), 4);
593 // Our press should be taken away
594 QVERIFY(!mouseArea->pressed());
596 // Flickable content should have moved.
597 QCOMPARE(flickable->contentX(), 10.);
598 QCOMPARE(flickable->contentY(), 10.);
600 QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(50, 50)));
605 void tst_QDeclarativeMouseArea::testQtQuick11Attributes()
607 QFETCH(QString, code);
608 QFETCH(QString, warning);
609 QFETCH(QString, error);
611 QDeclarativeEngine engine;
614 QDeclarativeComponent valid(&engine);
615 valid.setData("import QtQuick 1.1; MouseArea { " + code.toUtf8() + " }", QUrl(""));
616 obj = valid.create();
618 QVERIFY(valid.errorString().isEmpty());
621 QDeclarativeComponent invalid(&engine);
622 invalid.setData("import QtQuick 1.0; MouseArea { " + code.toUtf8() + " }", QUrl(""));
623 QTest::ignoreMessage(QtWarningMsg, warning.toUtf8());
624 obj = invalid.create();
625 QCOMPARE(invalid.errorString(), error);
629 void tst_QDeclarativeMouseArea::testQtQuick11Attributes_data()
631 QTest::addColumn<QString>("code");
632 QTest::addColumn<QString>("warning");
633 QTest::addColumn<QString>("error");
635 QTest::newRow("preventStealing") << "preventStealing: true"
636 << "QDeclarativeComponent: Component is not ready"
637 << ":1 \"MouseArea.preventStealing\" is not available in QtQuick 1.0.\n";
640 QTEST_MAIN(tst_QDeclarativeMouseArea)
642 #include "tst_qdeclarativemousearea.moc"