Adjust MouseArea autotest to check mouse events with transformations
authorAdriano Rezende <atdrez@gmail.com>
Sun, 26 Feb 2012 16:27:34 +0000 (17:27 +0100)
committerQt by Nokia <qt-info@nokia.com>
Sat, 30 Jun 2012 12:39:22 +0000 (14:39 +0200)
Tests mouse events with graphical transformations applied to the element.

Change-Id: I4b69e35cde4125aa047fa18357b22b898da92c20
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
tests/auto/quick/qquickmousearea/data/transformedMouseArea.qml [new file with mode: 0644]
tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp

diff --git a/tests/auto/quick/qquickmousearea/data/transformedMouseArea.qml b/tests/auto/quick/qquickmousearea/data/transformedMouseArea.qml
new file mode 100644 (file)
index 0000000..80cdda7
--- /dev/null
@@ -0,0 +1,21 @@
+import QtQuick 2.0
+
+Rectangle {
+    width: 400
+    height: 400
+
+    Rectangle {
+        x: 100
+        y: 100
+        width: 200
+        height: 200
+        rotation: 45
+
+        MouseArea {
+            scale: 0.5
+            hoverEnabled: true
+            anchors.fill: parent
+            objectName: "mouseArea"
+        }
+    }
+}
index 4b77874..8bc9b06 100644 (file)
@@ -80,6 +80,8 @@ private slots:
     void hoverVisible();
     void disableAfterPress();
     void onWheel();
+    void transformedMouseArea_data();
+    void transformedMouseArea();
 
 private:
     void acceptedButton_data();
@@ -1117,6 +1119,63 @@ void tst_QQuickMouseArea::onWheel()
     delete canvas;
 }
 
+void tst_QQuickMouseArea::transformedMouseArea_data()
+{
+    QTest::addColumn<bool>("insideTarget");
+    QTest::addColumn<QList<QPoint> >("points");
+
+    QList<QPoint> pointsInside;
+    pointsInside << QPoint(200, 140)
+                 << QPoint(140, 200)
+                 << QPoint(200, 200)
+                 << QPoint(260, 200)
+                 << QPoint(200, 260);
+    QTest::newRow("checking points inside") << true << pointsInside;
+
+    QList<QPoint> pointsOutside;
+    pointsOutside << QPoint(140, 140)
+                  << QPoint(260, 140)
+                  << QPoint(120, 200)
+                  << QPoint(280, 200)
+                  << QPoint(140, 260)
+                  << QPoint(260, 260);
+    QTest::newRow("checking points outside") << false << pointsOutside;
+}
+
+void tst_QQuickMouseArea::transformedMouseArea()
+{
+    QFETCH(bool, insideTarget);
+    QFETCH(QList<QPoint>, points);
+
+    QQuickView *canvas = createView();
+    canvas->setSource(testFileUrl("transformedMouseArea.qml"));
+    canvas->show();
+    canvas->requestActivateWindow();
+    QVERIFY(canvas->rootObject() != 0);
+
+    QQuickMouseArea *mouseArea = canvas->rootObject()->findChild<QQuickMouseArea *>("mouseArea");
+    QVERIFY(mouseArea != 0);
+
+    foreach (const QPoint &point, points) {
+        // check hover
+        QTest::mouseMove(canvas, point);
+        QTest::qWait(10);
+        QCOMPARE(mouseArea->property("containsMouse").toBool(), insideTarget);
+
+        // check mouse press
+        QTest::mousePress(canvas, Qt::LeftButton, 0, point);
+        QTest::qWait(10);
+        QCOMPARE(mouseArea->property("pressed").toBool(), insideTarget);
+
+        // check mouse release
+        QTest::mouseRelease(canvas, Qt::LeftButton, 0, point);
+        QTest::qWait(10);
+        QCOMPARE(mouseArea->property("pressed").toBool(), false);
+    }
+
+    delete canvas;
+}
+
 QTEST_MAIN(tst_QQuickMouseArea)
 
 #include "tst_qquickmousearea.moc"