summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/itemviews/qabstractitemview
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-10-11 14:14:31 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2016-10-11 14:14:31 +0000
commite166d7d1351834e21332ffd3b3523f06e691f26f (patch)
tree3da8d74b30adb8bc50fc1b5932886dd72da31799 /tests/auto/widgets/itemviews/qabstractitemview
parent182f4877bf9d9ff6dc92912751d5c7c4fb746fcb (diff)
parent905329200f2f3f9372bf07a001371c30c0663684 (diff)
Merge "Merge remote-tracking branch 'origin/5.7' into 5.8" into refs/staging/5.8
Diffstat (limited to 'tests/auto/widgets/itemviews/qabstractitemview')
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 7412637354..30c1b9c44b 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -148,6 +148,7 @@ private slots:
void QTBUG50102_SH_ItemView_ScrollMode();
void QTBUG50535_update_on_new_selection_model();
void testSelectionModelInSyncWithView();
+ void testClickToSelect();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -2102,5 +2103,56 @@ void tst_QAbstractItemView::testSelectionModelInSyncWithView()
QCOMPARE(view.selectionModel()->selection().indexes(), QModelIndexList() << model.index(0, 0));
}
+class SetSelectionTestView : public QListView
+{
+ Q_OBJECT
+public:
+ SetSelectionTestView() : QListView() {}
+
+signals:
+ void setSelectionCalled(const QRect &rect);
+
+protected:
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) Q_DECL_OVERRIDE
+ {
+ emit setSelectionCalled(rect);
+ QListView::setSelection(rect, flags);
+ }
+};
+
+void tst_QAbstractItemView::testClickToSelect()
+{
+ // This test verifies that the QRect that is passed from QAbstractItemView::mousePressEvent
+ // to the virtual method QAbstractItemView::setSelection(const QRect &, SelectionFlags)
+ // is the 1x1 rect which conains exactly the clicked pixel if no modifiers are pressed.
+
+ QStringList list;
+ list << "A" << "B" << "C";
+ QStringListModel model(list);
+
+ SetSelectionTestView view;
+ view.setModel(&model);
+ view.show();
+ QTest::qWaitForWindowExposed(&view);
+
+ QSignalSpy spy(&view, &SetSelectionTestView::setSelectionCalled);
+
+ const QModelIndex indexA(model.index(0, 0));
+ const QRect visualRectA = view.visualRect(indexA);
+ const QPoint centerA = visualRectA.center();
+
+ // Click the center of the visualRect of item "A"
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, centerA);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.back().front().value<QRect>(), QRect(centerA, QSize(1, 1)));
+
+ // Click a point slightly away from the center
+ const QPoint nearCenterA = centerA + QPoint(1, 1);
+ QVERIFY(visualRectA.contains(nearCenterA));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, nearCenterA);
+ QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.back().front().value<QRect>(), QRect(nearCenterA, QSize(1, 1)));
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"