aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickpathview
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-03-21 13:18:05 +1000
committerQt by Nokia <qt-info@nokia.com>2012-04-04 06:00:40 +0200
commit912c25633ede945fb9b64e09ecd9309e7cc2ac3c (patch)
tree35ef57607d3e586828bffaaff2f3300ebe4aabf9 /tests/auto/quick/qquickpathview
parent2e35d1c47b3a4ddadfda16e3337d4d8ef91b4ce3 (diff)
Support snapMode in PathView
PathView missed out on snapMode, which is especially useful for its SnapOneItem mode. Change-Id: I0e9b080ef72d9bc1e305445cd8dfde8e21e4e3da Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'tests/auto/quick/qquickpathview')
-rw-r--r--tests/auto/quick/qquickpathview/data/panels.qml44
-rw-r--r--tests/auto/quick/qquickpathview/tst_qquickpathview.cpp87
2 files changed, 131 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickpathview/data/panels.qml b/tests/auto/quick/qquickpathview/data/panels.qml
new file mode 100644
index 0000000000..a111e45736
--- /dev/null
+++ b/tests/auto/quick/qquickpathview/data/panels.qml
@@ -0,0 +1,44 @@
+import QtQuick 2.0
+
+Item {
+ id: root
+ property bool snapOne: false
+ property bool enforceRange: false
+ width: 320; height: 480
+
+ VisualItemModel {
+ id: itemModel
+
+ Rectangle {
+ width: root.width
+ height: root.height
+ color: "blue"
+ }
+ Rectangle {
+ width: root.width
+ height: root.height
+ color: "yellow"
+ }
+ Rectangle {
+ width: root.width
+ height: root.height
+ color: "green"
+ }
+ }
+
+ PathView {
+ id: view
+ objectName: "view"
+ anchors.fill: parent
+ model: itemModel
+ preferredHighlightBegin: 0.5
+ preferredHighlightEnd: 0.5
+ flickDeceleration: 30
+ highlightRangeMode: enforceRange ? PathView.StrictlyEnforceRange : PathView.NoHighlightRange
+ snapMode: root.snapOne ? PathView.SnapOneItem : PathView.SnapToItem
+ path: Path {
+ startX: -root.width; startY: root.height/2
+ PathLine { x: root.width*2; y: root.height/2 }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
index 85d2c3b6ea..fbe96bf672 100644
--- a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
+++ b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
@@ -125,6 +125,10 @@ private slots:
void asynchronous();
void cancelDrag();
void maximumFlickVelocity();
+ void snapToItem();
+ void snapToItem_data();
+ void snapOneItem();
+ void snapOneItem_data();
};
class TestObject : public QObject
@@ -1541,6 +1545,89 @@ void tst_QQuickPathView::maximumFlickVelocity()
delete canvas;
}
+void tst_QQuickPathView::snapToItem()
+{
+ QFETCH(bool, enforceRange);
+
+ QQuickView *canvas = createView();
+ canvas->setSource(testFileUrl("panels.qml"));
+ QQuickPathView *pathview = canvas->rootObject()->findChild<QQuickPathView*>("view");
+ QVERIFY(pathview != 0);
+
+ canvas->rootObject()->setProperty("enforceRange", enforceRange);
+ QTRY_VERIFY(!pathview->isMoving()); // ensure stable
+
+ int currentIndex = pathview->currentIndex();
+
+ QSignalSpy snapModeSpy(pathview, SIGNAL(snapModeChanged()));
+
+ flick(canvas, QPoint(200,10), QPoint(10,10), 180);
+
+ QVERIFY(pathview->isMoving());
+ QTRY_VERIFY(!pathview->isMoving());
+
+ QVERIFY(pathview->offset() == qFloor(pathview->offset()));
+
+ if (enforceRange)
+ QVERIFY(pathview->currentIndex() != currentIndex);
+ else
+ QVERIFY(pathview->currentIndex() == currentIndex);
+}
+
+void tst_QQuickPathView::snapToItem_data()
+{
+ QTest::addColumn<bool>("enforceRange");
+
+ QTest::newRow("no enforce range") << false;
+ QTest::newRow("enforce range") << true;
+}
+
+void tst_QQuickPathView::snapOneItem()
+{
+ QFETCH(bool, enforceRange);
+
+ QQuickView *canvas = createView();
+ canvas->setSource(testFileUrl("panels.qml"));
+ canvas->show();
+ canvas->requestActivateWindow();
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(canvas, qGuiApp->focusWindow());
+
+ QQuickPathView *pathview = canvas->rootObject()->findChild<QQuickPathView*>("view");
+ QVERIFY(pathview != 0);
+
+ canvas->rootObject()->setProperty("enforceRange", enforceRange);
+
+ QSignalSpy snapModeSpy(pathview, SIGNAL(snapModeChanged()));
+
+ canvas->rootObject()->setProperty("snapOne", true);
+ QVERIFY(snapModeSpy.count() == 1);
+ QTRY_VERIFY(!pathview->isMoving()); // ensure stable
+
+ int currentIndex = pathview->currentIndex();
+
+ double startOffset = pathview->offset();
+ flick(canvas, QPoint(200,10), QPoint(10,10), 180);
+
+ QVERIFY(pathview->isMoving());
+ QTRY_VERIFY(!pathview->isMoving());
+
+ // must have moved only one item
+ QCOMPARE(pathview->offset(), fmodf(3.0 + startOffset - 1.0, 3.0));
+
+ if (enforceRange)
+ QVERIFY(pathview->currentIndex() == currentIndex+1);
+ else
+ QVERIFY(pathview->currentIndex() == currentIndex);
+}
+
+void tst_QQuickPathView::snapOneItem_data()
+{
+ QTest::addColumn<bool>("enforceRange");
+
+ QTest::newRow("no enforce range") << false;
+ QTest::newRow("enforce range") << true;
+}
QTEST_MAIN(tst_QQuickPathView)