diff options
Diffstat (limited to 'tests/auto/quick/qquicklistview/tst_qquicklistview.cpp')
-rw-r--r-- | tests/auto/quick/qquicklistview/tst_qquicklistview.cpp | 170 |
1 files changed, 93 insertions, 77 deletions
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 8a3a23826d..48171266de 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtTest/QtTest> #include <QtCore/QStringListModel> @@ -187,6 +187,7 @@ private slots: void populateTransitions(); void populateTransitions_data(); + void repositionFirstItemOnPopulateTransition(); void sizeTransitions(); void sizeTransitions_data(); @@ -1172,7 +1173,7 @@ void tst_QQuickListView::removed_more(const QUrl &source, QQuickItemView::Vertic int firstVisibleIndex = -1; for (int i=0; i<items.size(); i++) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); - if (item && delegateVisible(item)) { + if (item && isDelegateVisible(item)) { firstVisibleIndex = i; break; } @@ -1404,7 +1405,7 @@ void tst_QQuickListView::moved(const QUrl &source, QQuickItemView::VerticalLayou int firstVisibleIndex = -1; for (int i=0; i<items.size(); i++) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); - if (item && delegateVisible(item)) { + if (item && isDelegateVisible(item)) { firstVisibleIndex = i; break; } @@ -2739,7 +2740,7 @@ void tst_QQuickListView::sectionsSnap() QTRY_VERIFY(listview != nullptr); listview->setSnapMode(snapMode); - QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); + QTRY_VERIFY(!QQuickItemPrivate::get(listview)->polishScheduled); QTRY_COMPARE(listview->currentIndex(), 0); QCOMPARE(listview->contentY(), qreal(-50)); @@ -2897,9 +2898,9 @@ void tst_QQuickListView::currentIndex() // moving currentItem out of view should make it invisible listview->setCurrentIndex(0); - QTRY_VERIFY(delegateVisible(listview->currentItem())); + QTRY_VERIFY(isDelegateVisible(listview->currentItem())); listview->setContentY(200); - QTRY_VERIFY(!delegateVisible(listview->currentItem())); + QTRY_VERIFY(!isDelegateVisible(listview->currentItem())); // empty model should reset currentIndex to -1 QaimModel emptyModel; @@ -3131,37 +3132,37 @@ void tst_QQuickListView::itemListFlicker() QQuickItem *item = findItem<QQuickItem>(contentItem, "item1"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); item = findItem<QQuickItem>(contentItem, "item2"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); item = findItem<QQuickItem>(contentItem, "item3"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); listview->setCurrentIndex(1); item = findItem<QQuickItem>(contentItem, "item1"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); item = findItem<QQuickItem>(contentItem, "item2"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); item = findItem<QQuickItem>(contentItem, "item3"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); listview->setCurrentIndex(2); item = findItem<QQuickItem>(contentItem, "item1"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); item = findItem<QQuickItem>(contentItem, "item2"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); item = findItem<QQuickItem>(contentItem, "item3"); QVERIFY(item); - QVERIFY(delegateVisible(item)); + QVERIFY(isDelegateVisible(item)); } void tst_QQuickListView::cacheBuffer() @@ -4406,7 +4407,7 @@ void tst_QQuickListView::resizeView() if (!item) qWarning() << "Item" << i << "not found"; QTRY_VERIFY(item); QTRY_COMPARE(item->y(), i*20.); - QCOMPARE(delegateVisible(item), i < 11); // inside view visible, outside not visible + QCOMPARE(isDelegateVisible(item), i < 11); // inside view visible, outside not visible } // ensure items outside view become invisible @@ -4419,7 +4420,7 @@ void tst_QQuickListView::resizeView() if (!item) qWarning() << "Item" << i << "not found"; QTRY_VERIFY(item); QTRY_COMPARE(item->y(), i*20.); - QCOMPARE(delegateVisible(item), i < 6); // inside view visible, outside not visible + QCOMPARE(isDelegateVisible(item), i < 6); // inside view visible, outside not visible } } @@ -5058,14 +5059,14 @@ void tst_QQuickListView::test_mirroring() QCOMPARE(listviewA->layoutDirection(), listviewA->effectiveLayoutDirection()); // LTR != RTL - foreach (const QString objectName, objectNames) + for (const QString &objectName : std::as_const(objectNames)) QVERIFY(findItem<QQuickItem>(listviewA, objectName)->x() != findItem<QQuickItem>(listviewB, objectName)->x()); listviewA->setProperty("layoutDirection", Qt::LeftToRight); listviewB->setProperty("layoutDirection", Qt::LeftToRight); // LTR == LTR - foreach (const QString objectName, objectNames) + for (const QString &objectName : std::as_const(objectNames)) QCOMPARE(findItem<QQuickItem>(listviewA, objectName)->x(), findItem<QQuickItem>(listviewB, objectName)->x()); QCOMPARE(listviewB->layoutDirection(), listviewB->effectiveLayoutDirection()); @@ -5073,25 +5074,25 @@ void tst_QQuickListView::test_mirroring() QVERIFY(listviewB->layoutDirection() != listviewB->effectiveLayoutDirection()); // LTR != LTR+mirror - foreach (const QString objectName, objectNames) + for (const QString &objectName : std::as_const(objectNames)) QVERIFY(findItem<QQuickItem>(listviewA, objectName)->x() != findItem<QQuickItem>(listviewB, objectName)->x()); listviewA->setProperty("layoutDirection", Qt::RightToLeft); // RTL == LTR+mirror - foreach (const QString objectName, objectNames) + for (const QString &objectName : std::as_const(objectNames)) QCOMPARE(findItem<QQuickItem>(listviewA, objectName)->x(), findItem<QQuickItem>(listviewB, objectName)->x()); listviewB->setProperty("layoutDirection", Qt::RightToLeft); // RTL != RTL+mirror - foreach (const QString objectName, objectNames) + for (const QString &objectName : std::as_const(objectNames)) QVERIFY(findItem<QQuickItem>(listviewA, objectName)->x() != findItem<QQuickItem>(listviewB, objectName)->x()); listviewA->setProperty("layoutDirection", Qt::LeftToRight); // LTR == RTL+mirror - foreach (const QString objectName, objectNames) + for (const QString &objectName : std::as_const(objectNames)) QCOMPARE(findItem<QQuickItem>(listviewA, objectName)->x(), findItem<QQuickItem>(listviewB, objectName)->x()); } @@ -6495,30 +6496,30 @@ void tst_QQuickListView::unrequestedVisibility() const QString wrapperObjectName = QStringLiteral("wrapper"); QQuickItem *item = findItem<QQuickItem>(leftContent, wrapperObjectName, 1); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 1); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 19); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 19); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 3); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); rightview->setCurrentIndex(0); @@ -6527,10 +6528,10 @@ void tst_QQuickListView::unrequestedVisibility() item = findItem<QQuickItem>(leftContent, wrapperObjectName, 1); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 1); QVERIFY(item); - QTRY_COMPARE(delegateVisible(item), true); + QTRY_COMPARE(isDelegateVisible(item), true); QVERIFY(!findItem<QQuickItem>(leftContent, wrapperObjectName, 19)); QVERIFY(!findItem<QQuickItem>(rightContent, wrapperObjectName, 19)); @@ -6542,123 +6543,123 @@ void tst_QQuickListView::unrequestedVisibility() item = findItem<QQuickItem>(leftContent, wrapperObjectName, 1); QVERIFY(item); - QTRY_COMPARE(delegateVisible(item), false); + QTRY_COMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 1); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 19); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 19); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 3); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); model.moveItems(19, 1, 1); QVERIFY(QQuickTest::qWaitForPolish(leftview)); QTRY_VERIFY((item = findItem<QQuickItem>(leftContent, wrapperObjectName, 1))); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 1); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 19); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 19); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 5); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); model.moveItems(3, 4, 1); QVERIFY(QQuickTest::qWaitForPolish(leftview)); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 5); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); model.moveItems(4, 3, 1); QVERIFY(QQuickTest::qWaitForPolish(leftview)); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 5); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); model.moveItems(16, 17, 1); QVERIFY(QQuickTest::qWaitForPolish(leftview)); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 5); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); model.moveItems(17, 16, 1); QVERIFY(QQuickTest::qWaitForPolish(leftview)); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 4); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); item = findItem<QQuickItem>(leftContent, wrapperObjectName, 5); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 16); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(rightContent, wrapperObjectName, 17); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); } void tst_QQuickListView::populateTransitions() @@ -6792,6 +6793,20 @@ void tst_QQuickListView::populateTransitions_data() QTest::newRow("empty to start with, no populate") << false << false << false; } +// QTBUG-111050 +/* Reposition first visible item in list view on populate transition + Note: Occurs only in BottomToTop or RightToLeft layout */ +void tst_QQuickListView::repositionFirstItemOnPopulateTransition() +{ + QScopedPointer<QQuickView> window(createView()); + window->setSource(testFileUrl("repositionListViewOnPopulateTransition.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); + QTRY_VERIFY(listview != nullptr); + QTRY_COMPARE(listview->contentY(), -100.0); +} /* * Tests if the first visible item is not repositioned if the same item @@ -7871,7 +7886,8 @@ void tst_QQuickListView::multipleDisplaced() QTRY_VERIFY(listview->property("displaceTransitionsDone").toBool()); QVariantMap transitionsStarted = listview->property("displaceTransitionsStarted").toMap(); - foreach (const QString &name, transitionsStarted.keys()) { + const QStringList keys = transitionsStarted.keys(); + for (const QString &name : keys) { QVERIFY2(transitionsStarted[name] == 1, qPrintable(QString("%1 was displaced %2 times").arg(name).arg(transitionsStarted[name].toInt()))); } @@ -8241,24 +8257,24 @@ void tst_QQuickListView::displayMargin() QQuickItem *item0 = findItem<QQuickItem>(content, "delegate", 0); QVERIFY(item0); - QCOMPARE(delegateVisible(item0), true); + QCOMPARE(isDelegateVisible(item0), true); // the 14th item should be within the end margin QQuickItem *item14 = findItem<QQuickItem>(content, "delegate", 13); QVERIFY(item14); - QCOMPARE(delegateVisible(item14), true); + QCOMPARE(isDelegateVisible(item14), true); // the 15th item should be outside the end margin QVERIFY(findItem<QQuickItem>(content, "delegate", 14) == nullptr); // the first delegate should still be within the begin margin listview->positionViewAtIndex(3, QQuickListView::Beginning); - QCOMPARE(delegateVisible(item0), true); + QCOMPARE(isDelegateVisible(item0), true); // the first delegate should now be outside the begin margin listview->positionViewAtIndex(4, QQuickListView::Beginning); - QCOMPARE(delegateVisible(item0), false); + QCOMPARE(isDelegateVisible(item0), false); } void tst_QQuickListView::negativeDisplayMargin() @@ -8280,29 +8296,29 @@ void tst_QQuickListView::negativeDisplayMargin() QQuickItem *item = findItem<QQuickItem>(content, "delegate", 0); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(content, "delegate", 7); QVERIFY(item); - QCOMPARE(delegateVisible(item), true); + QCOMPARE(isDelegateVisible(item), true); item = findItem<QQuickItem>(content, "delegate", 8); QVERIFY(item); - QCOMPARE(delegateVisible(item), false); + QCOMPARE(isDelegateVisible(item), false); // Flick until contentY means that delegate8 should be visible listview->setProperty("contentY", 500); item = findItem<QQuickItem>(content, "delegate", 8); QVERIFY(item); - QTRY_COMPARE(delegateVisible(item), true); + QTRY_COMPARE(isDelegateVisible(item), true); listview->setProperty("contentY", 1000); QTRY_VERIFY((item = findItem<QQuickItem>(content, "delegate", 14))); - QTRY_COMPARE(delegateVisible(item), true); + QTRY_COMPARE(isDelegateVisible(item), true); listview->setProperty("contentY", 0); QTRY_VERIFY(item = findItem<QQuickItem>(content, "delegate", 4)); - QTRY_COMPARE(delegateVisible(item), true); + QTRY_COMPARE(isDelegateVisible(item), true); } void tst_QQuickListView::highlightItemGeometryChanges() @@ -8404,7 +8420,7 @@ void tst_QQuickListView::stickyPositioning() listview->positionViewAtIndex(positionIndex, positionMode); - foreach (const QPointF &offset, movement) { + for (const QPointF &offset : std::as_const(movement)) { listview->setContentX(listview->contentX() + offset.x()); listview->setContentY(listview->contentY() + offset.y()); } |