aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@jollamobile.com>2014-08-08 11:05:12 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-08-08 11:05:12 +0200
commitb4b27168ac03d61f6dfa146c9262df44097eadfe (patch)
tree4fbfa2d3b58fa267ba8c2dbc4c7d5f077cdbc767 /tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
parent24581b838a5cc1dd5bd0f99cc02ed1aac9771de0 (diff)
parent9737b35ac0638dd301b670e940f4e424aab4b4f3 (diff)
Merge "Merge branch '5.3' into dev" into refs/staging/dev
Diffstat (limited to 'tests/auto/quick/qquicklistview/tst_qquicklistview.cpp')
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp126
1 files changed, 124 insertions, 2 deletions
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index 39610e57f7..50bf1e03f1 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -41,6 +41,8 @@
#include <QtTest/QtTest>
#include <QtCore/QStringListModel>
+#include <QtCore/QSortFilterProxyModel>
+#include <QtGui/QStandardItemModel>
#include <QtQuick/qquickview.h>
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlcontext.h>
@@ -50,11 +52,13 @@
#include <QtQuick/private/qquicktext_p.h>
#include <QtQml/private/qqmlobjectmodel_p.h>
#include <QtQml/private/qqmllistmodel_p.h>
+#include <QtQml/private/qqmldelegatemodel_p.h>
#include "../../shared/util.h"
#include "../shared/viewtestutil.h"
#include "../shared/visualtestutil.h"
#include "incrementalmodel.h"
#include "proxytestinnermodel.h"
+#include "randomsortmodel.h"
#include <math.h>
Q_DECLARE_METATYPE(Qt::LayoutDirection)
@@ -62,6 +66,7 @@ Q_DECLARE_METATYPE(QQuickItemView::VerticalLayoutDirection)
Q_DECLARE_METATYPE(QQuickItemView::PositionMode)
Q_DECLARE_METATYPE(QQuickListView::Orientation)
Q_DECLARE_METATYPE(Qt::Key)
+Q_DECLARE_METATYPE(QPersistentModelIndex)
using namespace QQuickViewTestUtil;
using namespace QQuickVisualTestUtil;
@@ -237,6 +242,11 @@ private slots:
void QTBUG_38209();
void programmaticFlickAtBounds();
+ void layoutChange();
+
+ void QTBUG_39492_data();
+ void QTBUG_39492();
+
private:
template <class T> void items(const QUrl &source);
template <class T> void changed(const QUrl &source);
@@ -7827,8 +7837,120 @@ void tst_QQuickListView::programmaticFlickAtBounds()
QVERIFY(!spy.wait(100));
}
-QTEST_MAIN(tst_QQuickListView)
+void tst_QQuickListView::layoutChange()
+{
+ RandomSortModel *model = new RandomSortModel;
+ QSortFilterProxyModel *sortModel = new QSortFilterProxyModel;
+ sortModel->setSourceModel(model);
+ sortModel->setSortRole(Qt::UserRole);
+ sortModel->setDynamicSortFilter(true);
+ sortModel->sort(0);
-#include "tst_qquicklistview.moc"
+ QScopedPointer<QQuickView> window(createView());
+ window->rootContext()->setContextProperty("testModel", QVariant::fromValue(sortModel));
+ window->setSource(testFileUrl("layoutChangeSort.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickListView *listview = window->rootObject()->findChild<QQuickListView *>("listView");
+ QVERIFY(listview);
+
+ for (int iter = 0; iter < 100; iter++) {
+ for (int i = 0; i < sortModel->rowCount(); ++i) {
+ QQuickItem *delegateItem = listview->itemAt(10, 10 + 2 * i * 20 + 20); // item + group
+ QVERIFY(delegateItem);
+ QQuickItem *delegateText = delegateItem->findChild<QQuickItem *>("delegateText");
+ QVERIFY(delegateText);
+
+ QCOMPARE(delegateText->property("text").toString(),
+ sortModel->index(i, 0, QModelIndex()).data().toString());
+ }
+
+ model->randomize();
+ listview->forceLayout();
+ QTest::qWait(5); // give view a chance to update
+ }
+}
+
+void tst_QQuickListView::QTBUG_39492_data()
+{
+ QStandardItemModel *sourceModel = new QStandardItemModel(this);
+ for (int i = 0; i < 5; ++i) {
+ QStandardItem *item = new QStandardItem(QString::number(i));
+ for (int j = 0; j < 5; ++j) {
+ QStandardItem *subItem = new QStandardItem(QString("%1-%2").arg(i).arg(j));
+ item->appendRow(subItem);
+ }
+ sourceModel->appendRow(item);
+ }
+
+ QSortFilterProxyModel *sortModel = new QSortFilterProxyModel(this);
+ sortModel->setSourceModel(sourceModel);
+
+ QTest::addColumn<QSortFilterProxyModel*>("model");
+ QTest::addColumn<QPersistentModelIndex>("rootIndex");
+
+ QTest::newRow("invalid rootIndex")
+ << sortModel
+ << QPersistentModelIndex();
+ QTest::newRow("rootIndex 1")
+ << sortModel
+ << QPersistentModelIndex(sortModel->index(1, 0));
+ QTest::newRow("rootIndex 3")
+ << sortModel
+ << QPersistentModelIndex(sortModel->index(3, 0));
+
+ const QModelIndex rootIndex2 = sortModel->index(2, 0);
+ QTest::newRow("rootIndex 2-1")
+ << sortModel
+ << QPersistentModelIndex(sortModel->index(1, 0, rootIndex2));
+}
+
+void tst_QQuickListView::QTBUG_39492()
+{
+ QFETCH(QSortFilterProxyModel*, model);
+ QFETCH(QPersistentModelIndex, rootIndex);
+
+ QQuickView *window = getView();
+ window->rootContext()->setContextProperty("testModel", QVariant::fromValue(model));
+ window->setSource(testFileUrl("qtbug39492.qml"));
+
+ QQuickListView *listview = window->rootObject()->findChild<QQuickListView *>("listView");
+ QVERIFY(listview);
+
+ QQmlDelegateModel *delegateModel = window->rootObject()->findChild<QQmlDelegateModel *>("delegateModel");
+ QVERIFY(delegateModel);
+
+ delegateModel->setRootIndex(QVariant::fromValue(QModelIndex(rootIndex)));
+ model->sort(0, Qt::AscendingOrder);
+ listview->forceLayout();
+
+ for (int i = 0; i < model->rowCount(rootIndex); ++i) {
+ QQuickItem *delegateItem = listview->itemAt(10, 10 + i * 20);
+ QVERIFY(delegateItem);
+ QQuickItem *delegateText = delegateItem->findChild<QQuickItem *>("delegateText");
+ QVERIFY(delegateText);
+ QCOMPARE(delegateText->property("text").toString(),
+ model->index(i, 0, rootIndex).data().toString());
+ }
+
+ model->sort(0, Qt::DescendingOrder);
+ listview->forceLayout();
+
+ for (int i = 0; i < model->rowCount(rootIndex); ++i) {
+ QQuickItem *delegateItem = listview->itemAt(10, 10 + i * 20);
+ QVERIFY(delegateItem);
+ QQuickItem *delegateText = delegateItem->findChild<QQuickItem *>("delegateText");
+ QVERIFY(delegateText);
+ QCOMPARE(delegateText->property("text").toString(),
+ model->index(i, 0, rootIndex).data().toString());
+ }
+
+ releaseView(window);
+}
+
+QTEST_MAIN(tst_QQuickListView)
+
+#include "tst_qquicklistview.moc"