aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickflickable
diff options
context:
space:
mode:
authorDaniel d'Andrada <daniel.dandrada@canonical.com>2012-12-18 09:47:57 -0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-09 18:42:42 +0100
commit54f9fe5d41bc4a66d03c9846c1990958518d8623 (patch)
tree6aa8625679f444d9f1d25c16c082b94c800fddd2 /tests/auto/quick/qquickflickable
parent27be7a832f017653ffda705407bb7a64246eda1f (diff)
Flickable: Test case for flicking twice using touches
When you flick twice in rapid succession, in the same direction, the expected behavior is for flickable to be moving quite fast in the direction of the flicks. This test check for a bug where when you flick using touch events instead of mouse ones, the second flick causes Flickable to immediately halt. Change-Id: I430515d82499b904a1d2e23402b753873490a2d9 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'tests/auto/quick/qquickflickable')
-rw-r--r--tests/auto/quick/qquickflickable/data/longList.qml22
-rw-r--r--tests/auto/quick/qquickflickable/tst_qquickflickable.cpp70
2 files changed, 92 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickflickable/data/longList.qml b/tests/auto/quick/qquickflickable/data/longList.qml
new file mode 100644
index 0000000000..424f2890ea
--- /dev/null
+++ b/tests/auto/quick/qquickflickable/data/longList.qml
@@ -0,0 +1,22 @@
+import QtQuick 2.0
+
+Flickable {
+ id: flick
+
+ width: 200
+ height: 480
+
+ contentHeight: 100 * 100
+
+ Grid {
+ columns: 1
+ Repeater {
+ model: 100
+ Rectangle {
+ width: flick.width
+ height: 100
+ color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1)
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
index 66071e65d4..6a85b4da2a 100644
--- a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
+++ b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
@@ -53,6 +53,8 @@
#include "../shared/viewtestutil.h"
#include "../shared/visualtestutil.h"
+#include <qpa/qwindowsysteminterface.h>
+
using namespace QQuickViewTestUtil;
using namespace QQuickVisualTestUtil;
@@ -88,8 +90,10 @@ private slots:
void margins();
void cancelOnMouseGrab();
void clickAndDragWhenTransformed();
+ void flickTwiceUsingTouches();
private:
+ void flickWithTouch(QWindow *window, QTouchDevice *touchDevice);
QQmlEngine engine;
};
@@ -1241,6 +1245,72 @@ void tst_qquickflickable::clickAndDragWhenTransformed()
delete view;
}
+void tst_qquickflickable::flickTwiceUsingTouches()
+{
+ QTouchDevice *touchDevice = new QTouchDevice;
+ touchDevice->setName("Fake Touchscreen");
+ touchDevice->setType(QTouchDevice::TouchScreen);
+ touchDevice->setCapabilities(QTouchDevice::Position);
+ QWindowSystemInterface::registerTouchDevice(touchDevice);
+
+ QQuickView *window = new QQuickView;
+ window->setSource(testFileUrl("longList.qml"));
+ window->show();
+ window->requestActivate();
+ QTest::qWaitForWindowActive(window);
+ QVERIFY(window->rootObject() != 0);
+
+ QQuickFlickable *flickable = qobject_cast<QQuickFlickable*>(window->rootObject());
+ QVERIFY(flickable != 0);
+
+ QCOMPARE(flickable->contentY(), 0.0f);
+ flickWithTouch(window, touchDevice);
+
+ qreal contentYAfterFirstFlick = flickable->contentY();
+ qDebug() << "contentYAfterFirstFlick " << contentYAfterFirstFlick;
+ QVERIFY(contentYAfterFirstFlick > 50.0f);
+
+ flickWithTouch(window, touchDevice);
+
+ // In the original bug, that second flick would cause Flickable to halt immediately
+ qreal contentYAfterSecondFlick = flickable->contentY();
+ qDebug() << "contentYAfterSecondFlick " << contentYAfterSecondFlick;
+ QVERIFY(contentYAfterSecondFlick > (contentYAfterFirstFlick + 80.0f));
+
+ delete window;
+}
+
+void tst_qquickflickable::flickWithTouch(QWindow *window, QTouchDevice *touchDevice)
+{
+ QTest::touchEvent(window, touchDevice)
+ .press(0, QPoint(100, 400), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 380), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 360), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 340), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 320), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 300), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 280), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .move(0, QPoint(100, 260), window);
+ QTest::qWait(1);
+ QTest::touchEvent(window, touchDevice)
+ .release(0, QPoint(100, 240), window);
+ QTest::qWait(1);
+}
+
QTEST_MAIN(tst_qquickflickable)
#include "tst_qquickflickable.moc"