aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-06-21 15:49:10 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-22 04:43:54 +0200
commitd2857ba596f334daca665aacfa074f71fc8ecdb4 (patch)
tree2782529a8f45689c3c3e910dfcf96abc724f855d /tests
parent5ac47a3909762e62b054a951adb6b5771cc6d0eb (diff)
Add tests for clicking and dragging with right and middle buttons.
Task-number: QTBUG-24461 Change-Id: I2c8b3455cb3aead5df7dfd85f65eb633a552b881 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/quick/qquickitem/tst_qquickitem.cpp63
-rw-r--r--tests/auto/quick/qquickmousearea/data/clicktwice.qml1
-rw-r--r--tests/auto/quick/qquickmousearea/data/doubleclick.qml1
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp178
4 files changed, 222 insertions, 21 deletions
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
index 47f9ff4fed..c1c8067b02 100644
--- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
@@ -166,6 +166,8 @@ private slots:
void paintOrder_data();
void paintOrder();
+ void acceptedMouseButtons();
+
private:
enum PaintOrderOp {
@@ -1665,6 +1667,67 @@ void tst_qquickitem::paintOrder()
QCOMPARE(items, expected);
}
+void tst_qquickitem::acceptedMouseButtons()
+{
+ TestItem item;
+ QCOMPARE(item.acceptedMouseButtons(), Qt::MouseButtons(Qt::NoButton));
+
+ QQuickCanvas canvas;
+ item.setSize(QSizeF(200,100));
+ item.setParentItem(canvas.rootItem());
+
+ QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 0);
+ QCOMPARE(item.releaseCount, 0);
+
+ QTest::mousePress(&canvas, Qt::RightButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::RightButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 0);
+ QCOMPARE(item.releaseCount, 0);
+
+ QTest::mousePress(&canvas, Qt::MiddleButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::MiddleButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 0);
+ QCOMPARE(item.releaseCount, 0);
+
+ item.setAcceptedMouseButtons(Qt::LeftButton);
+ QCOMPARE(item.acceptedMouseButtons(), Qt::MouseButtons(Qt::LeftButton));
+
+ QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 1);
+ QCOMPARE(item.releaseCount, 1);
+
+ QTest::mousePress(&canvas, Qt::RightButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::RightButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 1);
+ QCOMPARE(item.releaseCount, 1);
+
+ QTest::mousePress(&canvas, Qt::MiddleButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::MiddleButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 1);
+ QCOMPARE(item.releaseCount, 1);
+
+ item.setAcceptedMouseButtons(Qt::RightButton | Qt::MiddleButton);
+ QCOMPARE(item.acceptedMouseButtons(), Qt::MouseButtons(Qt::RightButton | Qt::MiddleButton));
+
+ QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 1);
+ QCOMPARE(item.releaseCount, 1);
+
+ QTest::mousePress(&canvas, Qt::RightButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::RightButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 2);
+ QCOMPARE(item.releaseCount, 2);
+
+ QTest::mousePress(&canvas, Qt::MiddleButton, 0, QPoint(50, 50));
+ QTest::mouseRelease(&canvas, Qt::MiddleButton, 0, QPoint(50, 50));
+ QCOMPARE(item.pressCount, 3);
+ QCOMPARE(item.releaseCount, 3);
+}
+
QTEST_MAIN(tst_qquickitem)
diff --git a/tests/auto/quick/qquickmousearea/data/clicktwice.qml b/tests/auto/quick/qquickmousearea/data/clicktwice.qml
index 002d1b9047..7fd10b27f3 100644
--- a/tests/auto/quick/qquickmousearea/data/clicktwice.qml
+++ b/tests/auto/quick/qquickmousearea/data/clicktwice.qml
@@ -7,6 +7,7 @@ Item {
property int released: 0
MouseArea {
+ objectName: "mousearea"
width: 200; height: 200
onPressed: { root.pressed++ }
onClicked: { root.clicked++ }
diff --git a/tests/auto/quick/qquickmousearea/data/doubleclick.qml b/tests/auto/quick/qquickmousearea/data/doubleclick.qml
index 1030d0c33e..3c0e99bacb 100644
--- a/tests/auto/quick/qquickmousearea/data/doubleclick.qml
+++ b/tests/auto/quick/qquickmousearea/data/doubleclick.qml
@@ -7,6 +7,7 @@ Item {
property int released: 0
MouseArea {
+ objectName: "mousearea"
width: 200; height: 200
onClicked: { root.clicked++ }
onDoubleClicked: { root.doubleClicked++ }
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index 2457ba727a..4b778745b3 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -50,23 +50,28 @@
#include "../../shared/util.h"
#include <QtGui/qstylehints.h>
-//#define OLDWAY
-
class tst_QQuickMouseArea: public QQmlDataTest
{
Q_OBJECT
private slots:
void dragProperties();
void resetDrag();
+ void dragging_data() { acceptedButton_data(); }
void dragging();
+ void invalidDrag_data() { rejectedButton_data(); }
+ void invalidDrag();
void setDragOnPressed();
void updateMouseAreaPosOnClick();
void updateMouseAreaPosOnResize();
void noOnClickedWithPressAndHold();
void onMousePressRejected();
void pressedCanceledOnWindowDeactivate();
+ void doubleClick_data() { acceptedButton_data(); }
void doubleClick();
+ void clickTwice_data() { acceptedButton_data(); }
void clickTwice();
+ void invalidClick_data() { rejectedButton_data(); }
+ void invalidClick();
void pressedOrdering();
void preventStealing();
void clickThrough();
@@ -77,9 +82,39 @@ private slots:
void onWheel();
private:
+ void acceptedButton_data();
+ void rejectedButton_data();
+
QQuickView *createView();
};
+Q_DECLARE_METATYPE(Qt::MouseButton)
+Q_DECLARE_METATYPE(Qt::MouseButtons)
+
+void tst_QQuickMouseArea::acceptedButton_data()
+{
+ QTest::addColumn<Qt::MouseButtons>("acceptedButtons");
+ QTest::addColumn<Qt::MouseButton>("button");
+
+ QTest::newRow("left") << Qt::MouseButtons(Qt::LeftButton) << Qt::LeftButton;
+ QTest::newRow("right") << Qt::MouseButtons(Qt::RightButton) << Qt::RightButton;
+ QTest::newRow("middle") << Qt::MouseButtons(Qt::MiddleButton) << Qt::MiddleButton;
+
+ QTest::newRow("left (left|right)") << Qt::MouseButtons(Qt::LeftButton | Qt::RightButton) << Qt::LeftButton;
+ QTest::newRow("right (right|middle)") << Qt::MouseButtons(Qt::RightButton | Qt::MiddleButton) << Qt::RightButton;
+ QTest::newRow("middle (left|middle)") << Qt::MouseButtons(Qt::LeftButton | Qt::MiddleButton) << Qt::MiddleButton;
+}
+
+void tst_QQuickMouseArea::rejectedButton_data()
+{
+ QTest::addColumn<Qt::MouseButtons>("acceptedButtons");
+ QTest::addColumn<Qt::MouseButton>("button");
+
+ QTest::newRow("middle (left|right)") << Qt::MouseButtons(Qt::LeftButton | Qt::RightButton) << Qt::MiddleButton;
+ QTest::newRow("left (right|middle)") << Qt::MouseButtons(Qt::RightButton | Qt::MiddleButton) << Qt::LeftButton;
+ QTest::newRow("right (left|middle)") << Qt::MouseButtons(Qt::LeftButton | Qt::MiddleButton) << Qt::RightButton;
+}
+
void tst_QQuickMouseArea::dragProperties()
{
QQuickView *canvas = createView();
@@ -195,9 +230,11 @@ void tst_QQuickMouseArea::resetDrag()
delete canvas;
}
-
void tst_QQuickMouseArea::dragging()
{
+ QFETCH(Qt::MouseButtons, acceptedButtons);
+ QFETCH(Qt::MouseButton, button);
+
QQuickView *canvas = createView();
canvas->setSource(testFileUrl("dragging.qml"));
@@ -211,6 +248,8 @@ void tst_QQuickMouseArea::dragging()
QVERIFY(mouseRegion != 0);
QVERIFY(drag != 0);
+ mouseRegion->setAcceptedButtons(acceptedButtons);
+
// target
QQuickItem *blackRect = canvas->rootObject()->findChild<QQuickItem*>("blackrect");
QVERIFY(blackRect != 0);
@@ -218,12 +257,7 @@ void tst_QQuickMouseArea::dragging()
QVERIFY(!drag->active());
-#ifdef OLDWAY
- QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
- QGuiApplication::sendEvent(canvas, &pressEvent);
-#else
- QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(100,100));
-#endif
+ QTest::mousePress(canvas, button, 0, QPoint(100,100));
QVERIFY(!drag->active());
QCOMPARE(blackRect->x(), 50.0);
@@ -241,13 +275,8 @@ void tst_QQuickMouseArea::dragging()
QCOMPARE(blackRect->x(), 72.0);
QCOMPARE(blackRect->y(), 72.0);
-#ifdef OLDWAY
- QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
- QGuiApplication::sendEvent(canvas, &releaseEvent);
-#else
- QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(122,122));
+ QTest::mouseRelease(canvas, button, 0, QPoint(122,122));
QTest::qWait(50);
-#endif
QVERIFY(!drag->active());
QCOMPARE(blackRect->x(), 72.0);
@@ -256,6 +285,61 @@ void tst_QQuickMouseArea::dragging()
delete canvas;
}
+void tst_QQuickMouseArea::invalidDrag()
+{
+ QFETCH(Qt::MouseButtons, acceptedButtons);
+ QFETCH(Qt::MouseButton, button);
+
+ QQuickView *canvas = createView();
+
+ canvas->setSource(testFileUrl("dragging.qml"));
+ canvas->show();
+ canvas->requestActivateWindow();
+ QTest::qWait(20);
+ QVERIFY(canvas->rootObject() != 0);
+
+ QQuickMouseArea *mouseRegion = canvas->rootObject()->findChild<QQuickMouseArea*>("mouseregion");
+ QQuickDrag *drag = mouseRegion->drag();
+ QVERIFY(mouseRegion != 0);
+ QVERIFY(drag != 0);
+
+ mouseRegion->setAcceptedButtons(acceptedButtons);
+
+ // target
+ QQuickItem *blackRect = canvas->rootObject()->findChild<QQuickItem*>("blackrect");
+ QVERIFY(blackRect != 0);
+ QVERIFY(blackRect == drag->target());
+
+ QVERIFY(!drag->active());
+
+ QTest::mousePress(canvas, button, 0, QPoint(100,100));
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ // First move event triggers drag, second is acted upon.
+ // This is due to possibility of higher stacked area taking precedence.
+
+ QTest::mouseMove(canvas, QPoint(111,111));
+ QTest::qWait(50);
+ QTest::mouseMove(canvas, QPoint(122,122));
+ QTest::qWait(50);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ QTest::mouseRelease(canvas, button, 0, QPoint(122,122));
+ QTest::qWait(50);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ delete canvas;
+}
+
void tst_QQuickMouseArea::setDragOnPressed()
{
QQuickView *canvas = createView();
@@ -509,26 +593,34 @@ void tst_QQuickMouseArea::pressedCanceledOnWindowDeactivate()
delete canvas;
}
+
void tst_QQuickMouseArea::doubleClick()
{
+ QFETCH(Qt::MouseButtons, acceptedButtons);
+ QFETCH(Qt::MouseButton, button);
+
QQuickView *canvas = createView();
canvas->setSource(testFileUrl("doubleclick.qml"));
canvas->show();
canvas->requestActivateWindow();
QVERIFY(canvas->rootObject() != 0);
+ QQuickMouseArea *mouseArea = canvas->rootObject()->findChild<QQuickMouseArea *>("mousearea");
+ QVERIFY(mouseArea);
+ mouseArea->setAcceptedButtons(acceptedButtons);
+
// The sequence for a double click is:
// press, release, (click), press, double click, release
- QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), button, button, 0);
QGuiApplication::sendEvent(canvas, &pressEvent);
- QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), button, button, 0);
QGuiApplication::sendEvent(canvas, &releaseEvent);
QCOMPARE(canvas->rootObject()->property("released").toInt(), 1);
QGuiApplication::sendEvent(canvas, &pressEvent);
- pressEvent = QMouseEvent(QEvent::MouseButtonDblClick, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ pressEvent = QMouseEvent(QEvent::MouseButtonDblClick, QPoint(100, 100), button, button, 0);
QGuiApplication::sendEvent(canvas, &pressEvent);
QGuiApplication::sendEvent(canvas, &releaseEvent);
@@ -542,16 +634,23 @@ void tst_QQuickMouseArea::doubleClick()
// QTBUG-14832
void tst_QQuickMouseArea::clickTwice()
{
+ QFETCH(Qt::MouseButtons, acceptedButtons);
+ QFETCH(Qt::MouseButton, button);
+
QQuickView *canvas = createView();
canvas->setSource(testFileUrl("clicktwice.qml"));
canvas->show();
canvas->requestActivateWindow();
QVERIFY(canvas->rootObject() != 0);
- QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ QQuickMouseArea *mouseArea = canvas->rootObject()->findChild<QQuickMouseArea *>("mousearea");
+ QVERIFY(mouseArea);
+ mouseArea->setAcceptedButtons(acceptedButtons);
+
+ QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), button, button, 0);
QGuiApplication::sendEvent(canvas, &pressEvent);
- QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), button, button, 0);
QGuiApplication::sendEvent(canvas, &releaseEvent);
QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 1);
@@ -559,7 +658,7 @@ void tst_QQuickMouseArea::clickTwice()
QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
QGuiApplication::sendEvent(canvas, &pressEvent);
- pressEvent = QMouseEvent(QEvent::MouseButtonDblClick, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ pressEvent = QMouseEvent(QEvent::MouseButtonDblClick, QPoint(100, 100), button, button, 0);
QGuiApplication::sendEvent(canvas, &pressEvent);
QGuiApplication::sendEvent(canvas, &releaseEvent);
@@ -570,6 +669,43 @@ void tst_QQuickMouseArea::clickTwice()
delete canvas;
}
+void tst_QQuickMouseArea::invalidClick()
+{
+ QFETCH(Qt::MouseButtons, acceptedButtons);
+ QFETCH(Qt::MouseButton, button);
+
+ QQuickView *canvas = createView();
+ canvas->setSource(testFileUrl("doubleclick.qml"));
+ canvas->show();
+ canvas->requestActivateWindow();
+ QVERIFY(canvas->rootObject() != 0);
+
+ QQuickMouseArea *mouseArea = canvas->rootObject()->findChild<QQuickMouseArea *>("mousearea");
+ QVERIFY(mouseArea);
+ mouseArea->setAcceptedButtons(acceptedButtons);
+
+ // The sequence for a double click is:
+ // press, release, (click), press, double click, release
+ QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), button, button, 0);
+ QGuiApplication::sendEvent(canvas, &pressEvent);
+
+ QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), button, button, 0);
+ QGuiApplication::sendEvent(canvas, &releaseEvent);
+
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 0);
+
+ QGuiApplication::sendEvent(canvas, &pressEvent);
+ pressEvent = QMouseEvent(QEvent::MouseButtonDblClick, QPoint(100, 100), button, button, 0);
+ QGuiApplication::sendEvent(canvas, &pressEvent);
+ QGuiApplication::sendEvent(canvas, &releaseEvent);
+
+ QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 0);
+ QCOMPARE(canvas->rootObject()->property("doubleClicked").toInt(), 0);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 0);
+
+ delete canvas;
+}
+
void tst_QQuickMouseArea::pressedOrdering()
{
QQuickView *canvas = createView();