aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquicklistview/tst_qquicklistview.cpp')
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp69
1 files changed, 56 insertions, 13 deletions
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)