aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquicklistview
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquicklistview')
-rw-r--r--tests/auto/quick/qquicklistview/data/displacedTransitions.qml35
-rw-r--r--tests/auto/quick/qquicklistview/data/flickBeyondBoundsBug.qml43
-rw-r--r--tests/auto/quick/qquicklistview/data/multipleTransitions.qml2
-rw-r--r--tests/auto/quick/qquicklistview/qquicklistview.pro4
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp69
5 files changed, 136 insertions, 17 deletions
diff --git a/tests/auto/quick/qquicklistview/data/displacedTransitions.qml b/tests/auto/quick/qquicklistview/data/displacedTransitions.qml
index cc7892e930..964ded10ee 100644
--- a/tests/auto/quick/qquicklistview/data/displacedTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/displacedTransitions.qml
@@ -53,6 +53,17 @@ Rectangle {
property int targetTransitionsDone
property int displaceTransitionsDone
+ property var displacedTargetIndexes: new Array()
+ property var displacedTargetItems: new Array()
+
+ // for QDeclarativeListProperty types
+ function copyList(propList) {
+ var temp = new Array()
+ for (var i=0; i<propList.length; i++)
+ temp.push(propList[i])
+ return temp
+ }
+
objectName: "list"
focus: true
anchors.centerIn: parent
@@ -70,6 +81,12 @@ Rectangle {
id: displaced
enabled: displacedEnabled
SequentialAnimation {
+ ScriptAction {
+ script: {
+ list.displacedTargetIndexes.push(displaced.ViewTransition.targetIndexes)
+ list.displacedTargetItems.push(list.copyList(displaced.ViewTransition.targetItems))
+ }
+ }
ParallelAnimation {
NumberAnimation { properties: "x"; to: displaced_transitionVia.x; duration: root.duration }
NumberAnimation { properties: "y"; to: displaced_transitionVia.y; duration: root.duration }
@@ -83,6 +100,12 @@ Rectangle {
id: addDisplaced
enabled: addDisplacedEnabled
SequentialAnimation {
+ ScriptAction {
+ script: {
+ list.displacedTargetIndexes.push(addDisplaced.ViewTransition.targetIndexes)
+ list.displacedTargetItems.push(list.copyList(addDisplaced.ViewTransition.targetItems))
+ }
+ }
ParallelAnimation {
NumberAnimation { properties: "x"; to: addDisplaced_transitionVia.x; duration: root.duration }
NumberAnimation { properties: "y"; to: addDisplaced_transitionVia.y; duration: root.duration }
@@ -96,6 +119,12 @@ Rectangle {
id: moveDisplaced
enabled: moveDisplacedEnabled
SequentialAnimation {
+ ScriptAction {
+ script: {
+ list.displacedTargetIndexes.push(moveDisplaced.ViewTransition.targetIndexes)
+ list.displacedTargetItems.push(list.copyList(moveDisplaced.ViewTransition.targetItems))
+ }
+ }
ParallelAnimation {
NumberAnimation { properties: "x"; to: moveDisplaced_transitionVia.x; duration: root.duration }
NumberAnimation { properties: "y"; to: moveDisplaced_transitionVia.y; duration: root.duration }
@@ -109,6 +138,12 @@ Rectangle {
id: removeDisplaced
enabled: removeDisplacedEnabled
SequentialAnimation {
+ ScriptAction {
+ script: {
+ list.displacedTargetIndexes.push(removeDisplaced.ViewTransition.targetIndexes)
+ list.displacedTargetItems.push(list.copyList(removeDisplaced.ViewTransition.targetItems))
+ }
+ }
ParallelAnimation {
NumberAnimation { properties: "x"; to: removeDisplaced_transitionVia.x; duration: root.duration }
NumberAnimation { properties: "y"; to: removeDisplaced_transitionVia.y; duration: root.duration }
diff --git a/tests/auto/quick/qquicklistview/data/flickBeyondBoundsBug.qml b/tests/auto/quick/qquicklistview/data/flickBeyondBoundsBug.qml
new file mode 100644
index 0000000000..0a1b1a1b64
--- /dev/null
+++ b/tests/auto/quick/qquicklistview/data/flickBeyondBoundsBug.qml
@@ -0,0 +1,43 @@
+import QtQuick 2.0
+
+Rectangle {
+ id: root
+ width: 240
+ height: 320
+ color: "#ffffff"
+
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ height: column.height
+ Column {
+ id: column
+ Text {
+ text: "index: " + index + ", delegate A"
+ Component.onCompleted: height = index % 2 ? 30 : 20
+ }
+ Text {
+ x: 200
+ text: wrapper.y
+ height: 25
+ }
+ }
+ color: ListView.isCurrentItem ? "lightsteelblue" : "#EEEEEE"
+ }
+ }
+ ListView {
+ id: list
+ objectName: "list"
+ focus: true
+ width: 240
+ height: 320
+ model: 2
+ delegate: myDelegate
+ highlightMoveSpeed: 1000
+ highlightResizeSpeed: 1000
+ cacheBuffer: 400
+ }
+ Text { anchors.bottom: parent.bottom; text: list.contentY }
+}
diff --git a/tests/auto/quick/qquicklistview/data/multipleTransitions.qml b/tests/auto/quick/qquicklistview/data/multipleTransitions.qml
index 8264b42b64..68efeea2ec 100644
--- a/tests/auto/quick/qquicklistview/data/multipleTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/multipleTransitions.qml
@@ -10,7 +10,7 @@ Rectangle {
// interrupting transitions will still produce the correct result)
property int timeBetweenActions: duration / 2
- property int duration: 300
+ property int duration: 100
property int count: list.count
diff --git a/tests/auto/quick/qquicklistview/qquicklistview.pro b/tests/auto/quick/qquicklistview/qquicklistview.pro
index 4cac8e7665..d4d97e2106 100644
--- a/tests/auto/quick/qquicklistview/qquicklistview.pro
+++ b/tests/auto/quick/qquicklistview/qquicklistview.pro
@@ -9,8 +9,6 @@ SOURCES += tst_qquicklistview.cpp \
include (../../shared/util.pri)
include (../shared/util.pri)
-testDataFiles.files = data
-testDataFiles.path = .
-DEPLOYMENT += testDataFiles
+TESTDATA = data/*
QT += core-private gui-private qml-private quick-private widgets widgets-private v8-private opengl-private testlib
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index 9195aab632..dcc2e9dd16 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -184,6 +184,8 @@ private slots:
void multipleTransitions();
void multipleTransitions_data();
+ void flickBeyondBounds();
+
private:
template <class T> void items(const QUrl &source, bool forceLayout);
template <class T> void changed(const QUrl &source, bool forceLayout);
@@ -2351,6 +2353,11 @@ void tst_QQuickListView::currentIndex()
QVERIFY(!listview->highlightItem());
QVERIFY(!listview->currentItem());
+ listview->setCurrentIndex(0);
+ QTRY_VERIFY(listview->currentItem()->isVisible());
+ listview->setContentY(200);
+ QTRY_VERIFY(!listview->currentItem()->isVisible());
+
delete canvas;
}
@@ -5648,11 +5655,26 @@ void tst_QQuickListView::displacedTransitions()
case ListChange::SetContentY:
break;
}
+
+ QVariantList resultTargetIndexes = listview->property("displacedTargetIndexes").toList();
+ QVariantList resultTargetItems = listview->property("displacedTargetItems").toList();
+
if ((useDisplaced && displacedEnabled)
|| (useAddDisplaced && addDisplacedEnabled)
|| (useMoveDisplaced && moveDisplacedEnabled)
|| (useRemoveDisplaced && removeDisplacedEnabled)) {
QTRY_VERIFY(listview->property("displaceTransitionsDone").toBool());
+
+ // check the correct number of target items and indexes were received
+ QCOMPARE(resultTargetIndexes.count(), expectedDisplacedIndexes.count());
+ for (int i=0; i<resultTargetIndexes.count(); i++)
+ QCOMPARE(resultTargetIndexes[i].value<QList<int> >().count(), change.count);
+ QCOMPARE(resultTargetItems.count(), expectedDisplacedIndexes.count());
+ for (int i=0; i<resultTargetItems.count(); i++)
+ QCOMPARE(resultTargetItems[i].toList().count(), change.count);
+ } else {
+ QCOMPARE(resultTargetIndexes.count(), 0);
+ QCOMPARE(resultTargetItems.count(), 0);
}
if (change.type == ListChange::Inserted && useAddDisplaced && addDisplacedEnabled)
@@ -5779,8 +5801,6 @@ void tst_QQuickListView::displacedTransitions_data()
void tst_QQuickListView::multipleTransitions()
{
- QSKIP("QTBUG-24523");
-
// Tests that if you interrupt a transition in progress with another action that
// cancels the previous transition, the resulting items are still placed correctly.
@@ -5829,17 +5849,15 @@ void tst_QQuickListView::multipleTransitions()
int timeBetweenActions = canvas->rootObject()->property("timeBetweenActions").toInt();
- QList<QPair<QString, QString> > targetItems;
for (int i=0; i<changes.count(); i++) {
switch (changes[i].type) {
case ListChange::Inserted:
{
+ QList<QPair<QString, QString> > targetItems;
for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
targetItems << qMakePair(QString("new item %1").arg(j), QString::number(j));
model.insertItems(changes[i].index, targetItems);
QTRY_COMPARE(model.count(), listview->count());
- QTRY_VERIFY(listview->property("runningAddTargets").toBool());
- QTRY_VERIFY(listview->property("runningAddDisplaced").toBool());
if (i == changes.count() - 1) {
QTRY_VERIFY(!listview->property("runningAddTargets").toBool());
QTRY_VERIFY(!listview->property("runningAddDisplaced").toBool());
@@ -5849,12 +5867,8 @@ void tst_QQuickListView::multipleTransitions()
break;
}
case ListChange::Removed:
- for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
- targetItems << qMakePair(model.name(i), model.number(i));
model.removeItems(changes[i].index, changes[i].count);
QTRY_COMPARE(model.count(), listview->count());
- QTRY_VERIFY(listview->property("runningRemoveTargets").toBool());
- QTRY_VERIFY(listview->property("runningRemoveDisplaced").toBool());
if (i == changes.count() - 1) {
QTRY_VERIFY(!listview->property("runningRemoveTargets").toBool());
QTRY_VERIFY(!listview->property("runningRemoveDisplaced").toBool());
@@ -5863,11 +5877,8 @@ void tst_QQuickListView::multipleTransitions()
}
break;
case ListChange::Moved:
- for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
- targetItems << qMakePair(model.name(i), model.number(i));
model.moveItems(changes[i].index, changes[i].to, changes[i].count);
- QTRY_VERIFY(listview->property("runningMoveTargets").toBool());
- QTRY_VERIFY(listview->property("runningMoveDisplaced").toBool());
+ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
if (i == changes.count() - 1) {
QTRY_VERIFY(!listview->property("runningMoveTargets").toBool());
QTRY_VERIFY(!listview->property("runningMoveDisplaced").toBool());
@@ -5990,6 +6001,38 @@ void tst_QQuickListView::matchItemLists(const QVariantList &itemLists, const QLi
}
}
+void tst_QQuickListView::flickBeyondBounds()
+{
+ QQuickView *canvas = createView();
+
+ canvas->setSource(testFileUrl("flickBeyondBoundsBug.qml"));
+ canvas->show();
+ qApp->processEvents();
+
+ QQuickListView *listview = findItem<QQuickListView>(canvas->rootObject(), "list");
+ QTRY_VERIFY(listview != 0);
+
+ QQuickItem *contentItem = listview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
+
+ // Flick view up beyond bounds
+ flick(canvas, QPoint(10, 10), QPoint(10, -1000), 180);
+ QTRY_VERIFY(findItems<QQuickItem>(contentItem, "wrapper").count() == 0);
+
+ // We're really testing that we don't get stuck in a loop,
+ // but also confirm items positioned correctly.
+ QTRY_COMPARE(findItems<QQuickItem>(contentItem, "wrapper").count(), 2);
+ for (int i = 0; i < 2; ++i) {
+ QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QTRY_VERIFY(item);
+ QTRY_VERIFY(item->y() == i*45);
+ }
+
+ delete canvas;
+}
+
QTEST_MAIN(tst_QQuickListView)