summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp')
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 2dd0337117..89fb30557b 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -32,6 +32,7 @@
#include <qabstractitemview.h>
#include <qstandarditemmodel.h>
#include <qapplication.h>
+#include <qevent.h>
#include <qlistview.h>
#include <qlistwidget.h>
#include <qtableview.h>
@@ -248,6 +249,8 @@ private slots:
void shiftSelectionAfterChangingModelContents();
void QTBUG48968_reentrant_updateEditorGeometries();
void QTBUG50102_SH_ItemView_ScrollMode();
+ void QTBUG50535_update_on_new_selection_model();
+ void testSelectionModelInSyncWithView();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -2067,6 +2070,111 @@ void tst_QAbstractItemView::QTBUG50102_SH_ItemView_ScrollMode()
QCOMPARE(view.horizontalScrollMode(), styleScrollMode);
}
+void tst_QAbstractItemView::QTBUG50535_update_on_new_selection_model()
+{
+ QStandardItemModel model;
+ for (int i = 0; i < 10; ++i)
+ model.appendRow(new QStandardItem(QStringLiteral("%1").arg(i)));
+
+ class ListView : public QListView
+ {
+ public:
+ ListView()
+ : m_paintEventsCount(0)
+ {
+ }
+
+ int m_paintEventsCount;
+
+ protected:
+ bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE
+ {
+ if (event->type() == QEvent::Paint)
+ ++m_paintEventsCount;
+ return QListView::viewportEvent(event);
+ }
+ };
+
+ // keep the current/selected row in the "low range", i.e. be sure it's visible, otherwise we
+ // don't get updates and the test fails.
+
+ ListView view;
+ view.setModel(&model);
+ view.selectionModel()->setCurrentIndex(model.index(1, 0), QItemSelectionModel::SelectCurrent);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+
+ QItemSelectionModel selectionModel(&model);
+ selectionModel.setCurrentIndex(model.index(2, 0), QItemSelectionModel::Current);
+
+ int oldPaintEventsCount = view.m_paintEventsCount;
+ view.setSelectionModel(&selectionModel);
+ QTRY_VERIFY(view.m_paintEventsCount > oldPaintEventsCount);
+
+
+ QItemSelectionModel selectionModel2(&model);
+ selectionModel2.select(model.index(0, 0), QItemSelectionModel::ClearAndSelect);
+ selectionModel2.setCurrentIndex(model.index(1, 0), QItemSelectionModel::Current);
+
+ oldPaintEventsCount = view.m_paintEventsCount;
+ view.setSelectionModel(&selectionModel2);
+ QTRY_VERIFY(view.m_paintEventsCount > oldPaintEventsCount);
+}
+
+void tst_QAbstractItemView::testSelectionModelInSyncWithView()
+{
+ QStandardItemModel model;
+ for (int i = 0; i < 10; ++i)
+ model.appendRow(new QStandardItem(QStringLiteral("%1").arg(i)));
+
+ class ListView : public QListView
+ {
+ public:
+ using QListView::selectedIndexes;
+ };
+
+ ListView view;
+ QVERIFY(!view.selectionModel());
+
+ view.setModel(&model);
+ QVERIFY(view.selectionModel());
+ QVERIFY(view.selectedIndexes().isEmpty());
+ QVERIFY(view.selectionModel()->selection().isEmpty());
+
+ view.setCurrentIndex(model.index(0, 0));
+ QCOMPARE(view.currentIndex(), model.index(0, 0));
+ QCOMPARE(view.selectionModel()->currentIndex(), model.index(0, 0));
+
+ view.selectionModel()->setCurrentIndex(model.index(1, 0), QItemSelectionModel::SelectCurrent);
+ QCOMPARE(view.currentIndex(), model.index(1, 0));
+ QCOMPARE(view.selectedIndexes(), QModelIndexList() << model.index(1, 0));
+ QCOMPARE(view.selectionModel()->currentIndex(), model.index(1, 0));
+ QCOMPARE(view.selectionModel()->selection().indexes(), QModelIndexList() << model.index(1, 0));
+
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QItemSelectionModel selectionModel(&model);
+ selectionModel.setCurrentIndex(model.index(2, 0), QItemSelectionModel::Current);
+
+ view.setSelectionModel(&selectionModel);
+ QCOMPARE(view.currentIndex(), model.index(2, 0));
+ QCOMPARE(view.selectedIndexes(), QModelIndexList());
+ QCOMPARE(view.selectionModel()->currentIndex(), model.index(2, 0));
+ QCOMPARE(view.selectionModel()->selection().indexes(), QModelIndexList());
+
+
+ QItemSelectionModel selectionModel2(&model);
+ selectionModel2.select(model.index(0, 0), QItemSelectionModel::ClearAndSelect);
+ selectionModel2.setCurrentIndex(model.index(1, 0), QItemSelectionModel::Current);
+
+ view.setSelectionModel(&selectionModel2);
+ QCOMPARE(view.currentIndex(), model.index(1, 0));
+ QCOMPARE(view.selectedIndexes(), QModelIndexList() << model.index(0, 0));
+ QCOMPARE(view.selectionModel()->currentIndex(), model.index(1, 0));
+ QCOMPARE(view.selectionModel()->selection().indexes(), QModelIndexList() << model.index(0, 0));
+}
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"