Adjust Flickable autotest to check mouse events with transformation
authorAdriano Rezende <atdrez@gmail.com>
Sun, 26 Feb 2012 16:26:49 +0000 (17:26 +0100)
committerQt by Nokia <qt-info@nokia.com>
Sat, 14 Jul 2012 13:07:19 +0000 (15:07 +0200)
Tests mouse events with graphical transformations applied to the element.

Change-Id: I767a40ca0d5ed748bcb27ad23212ddbc22272fc5
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
tests/auto/quick/qquickflickable/data/transformedFlickable.qml [new file with mode: 0644]
tests/auto/quick/qquickflickable/tst_qquickflickable.cpp

diff --git a/tests/auto/quick/qquickflickable/data/transformedFlickable.qml b/tests/auto/quick/qquickflickable/data/transformedFlickable.qml
new file mode 100644 (file)
index 0000000..ed5b0ae
--- /dev/null
@@ -0,0 +1,43 @@
+import QtQuick 2.0
+
+Rectangle {
+    width: 400
+    height: 400
+
+    Rectangle {
+        x: 100
+        y: 100
+        width: 200
+        height: 200
+        rotation: 45
+
+        Rectangle {
+            scale: 0.5
+            color: "#888888"
+            anchors.fill: parent
+
+            Flickable {
+                id: flickable
+                contentHeight: 300
+                anchors.fill: parent
+                objectName: "flickable"
+
+                property alias itemPressed: mouseArea.pressed
+
+                Rectangle {
+                    x: 50
+                    y: 50
+                    width: 100
+                    height: 100
+                    scale: 0.4
+                    color: "red"
+
+                    MouseArea {
+                        id: mouseArea
+                        anchors.fill: parent
+                    }
+                }
+            }
+        }
+    }
+}
index 242f639..90f4b6c 100644 (file)
@@ -40,6 +40,7 @@
 ****************************************************************************/
 #include <qtest.h>
 #include <QtTest/QSignalSpy>
+#include <QtGui/QStyleHints>
 #include <QtQml/qqmlengine.h>
 #include <QtQml/qqmlcomponent.h>
 #include <QtQuick/qquickview.h>
@@ -86,6 +87,7 @@ private slots:
     void flickVelocity();
     void margins();
     void cancelOnMouseGrab();
+    void clickAndDragWhenTransformed();
 
 private:
     QQmlEngine engine;
@@ -1133,6 +1135,52 @@ void tst_qquickflickable::cancelOnMouseGrab()
     QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(50, 10));
 }
 
+void tst_qquickflickable::clickAndDragWhenTransformed()
+{
+    QQuickView *canvas = new QQuickView;
+    canvas->setSource(testFileUrl("transformedFlickable.qml"));
+    canvas->show();
+    canvas->requestActivateWindow();
+    QTest::qWaitForWindowShown(canvas);
+    QVERIFY(canvas->rootObject() != 0);
+
+    QQuickFlickable *flickable = canvas->rootObject()->findChild<QQuickFlickable*>("flickable");
+    QVERIFY(flickable != 0);
+
+    // click outside child rect
+    QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(190, 190));
+    QTest::qWait(10);
+    QCOMPARE(flickable->property("itemPressed").toBool(), false);
+    QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(190, 190));
+
+    // click inside child rect
+    QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(200, 200));
+    QTest::qWait(10);
+    QCOMPARE(flickable->property("itemPressed").toBool(), true);
+    QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(200, 200));
+
+    const int threshold = qApp->styleHints()->startDragDistance();
+
+    // drag outside bounds
+    QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(160, 160));
+    QTest::qWait(10);
+    QTest::mouseMove(canvas, QPoint(160 + threshold * 2, 160));
+    QTest::mouseMove(canvas, QPoint(160 + threshold * 3, 160));
+    QCOMPARE(flickable->isDragging(), false);
+    QCOMPARE(flickable->property("itemPressed").toBool(), false);
+    QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(180, 160));
+
+    // drag inside bounds
+    QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(200, 140));
+    QTest::qWait(10);
+    QTest::mouseMove(canvas, QPoint(200 + threshold * 2, 140));
+    QTest::mouseMove(canvas, QPoint(200 + threshold * 3, 140));
+    QCOMPARE(flickable->isDragging(), true);
+    QCOMPARE(flickable->property("itemPressed").toBool(), false);
+    QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(220, 140));
+
+    delete canvas;
+}
 
 QTEST_MAIN(tst_qquickflickable)