summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/itemmodels
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@digia.com>2014-06-05 22:26:44 +0200
committerJ-P Nurmi <jpnurmi@digia.com>2014-06-05 22:26:44 +0200
commit0fcce50af009f97efa2a5c5f2c74415c92830962 (patch)
treef8abf0e4f445fed9480b426b2f856b50911f1210 /tests/auto/corelib/itemmodels
parent74d46a669badc5bf32187686102ca4e644a3c0af (diff)
parentc54f7720d09e7d00f3309736bbeaaa6a81967ec1 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: mkspecs/features/qt.prf src/plugins/platforms/xcb/qxcbwindow.h src/tools/qdoc/qdocindexfiles.cpp src/widgets/kernel/qwidget_qpa.cpp Change-Id: I214f57b03bc2ff86cf3b7dfe2966168af93a5a67
Diffstat (limited to 'tests/auto/corelib/itemmodels')
-rw-r--r--tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
index c385a02b9c..f36bbbc5b6 100644
--- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
@@ -71,6 +71,7 @@ private slots:
void submit_data();
void submit();
void testRoleNames();
+ void testSwappingRowsProxy();
};
// Subclass that exposes the protected functions.
@@ -397,6 +398,103 @@ void tst_QAbstractProxyModel::testRoleNames()
QVERIFY( proxy2RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" );
}
+// This class only supports very simple table models
+class SwappingProxy : public QAbstractProxyModel
+{
+ static int swapRow(const int row)
+ {
+ if (row == 2) {
+ return 3;
+ } else if (row == 3) {
+ return 2;
+ } else {
+ return row;
+ }
+ }
+public:
+ virtual QModelIndex index(int row, int column, const QModelIndex &parentIdx) const
+ {
+ if (!sourceModel())
+ return QModelIndex();
+ if (row < 0 || column < 0)
+ return QModelIndex();
+ if (row >= sourceModel()->rowCount())
+ return QModelIndex();
+ if (column >= sourceModel()->columnCount())
+ return QModelIndex();
+ return createIndex(row, column, parentIdx.internalPointer());
+ }
+
+ virtual QModelIndex parent(const QModelIndex &parentIdx) const
+ {
+ // well, we're a 2D model
+ Q_UNUSED(parentIdx);
+ return QModelIndex();
+ }
+
+ virtual int rowCount(const QModelIndex &parentIdx) const
+ {
+ if (parentIdx.isValid() || !sourceModel())
+ return 0;
+ return sourceModel()->rowCount();
+ }
+
+ virtual int columnCount(const QModelIndex &parentIdx) const
+ {
+ if (parentIdx.isValid() || !sourceModel())
+ return 0;
+ return sourceModel()->rowCount();
+ }
+
+ virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const
+ {
+ if (!proxyIndex.isValid())
+ return QModelIndex();
+ if (!sourceModel())
+ return QModelIndex();
+ Q_ASSERT(!proxyIndex.parent().isValid());
+ return sourceModel()->index(swapRow(proxyIndex.row()), proxyIndex.column(), QModelIndex());
+ }
+
+ virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const
+ {
+ if (!sourceIndex.isValid())
+ return QModelIndex();
+ if (!sourceModel())
+ return QModelIndex();
+ Q_ASSERT(!sourceIndex.parent().isValid());
+ return index(swapRow(sourceIndex.row()), sourceIndex.column(), QModelIndex());
+ }
+};
+
+void tst_QAbstractProxyModel::testSwappingRowsProxy()
+{
+ QStandardItemModel defaultModel;
+ defaultModel.setRowCount(4);
+ defaultModel.setColumnCount(2);
+ for (int row = 0; row < defaultModel.rowCount(); ++row) {
+ defaultModel.setItem(row, 0, new QStandardItem(QString::number(row) + QLatin1Char('A')));
+ defaultModel.setItem(row, 1, new QStandardItem(QString::number(row) + QLatin1Char('B')));
+ }
+ SwappingProxy proxy;
+ proxy.setSourceModel(&defaultModel);
+ QCOMPARE(proxy.data(proxy.index(0, 0, QModelIndex())), QVariant("0A"));
+ QCOMPARE(proxy.data(proxy.index(0, 1, QModelIndex())), QVariant("0B"));
+ QCOMPARE(proxy.data(proxy.index(1, 0, QModelIndex())), QVariant("1A"));
+ QCOMPARE(proxy.data(proxy.index(1, 1, QModelIndex())), QVariant("1B"));
+ QCOMPARE(proxy.data(proxy.index(2, 0, QModelIndex())), QVariant("3A"));
+ QCOMPARE(proxy.data(proxy.index(2, 1, QModelIndex())), QVariant("3B"));
+ QCOMPARE(proxy.data(proxy.index(3, 0, QModelIndex())), QVariant("2A"));
+ QCOMPARE(proxy.data(proxy.index(3, 1, QModelIndex())), QVariant("2B"));
+
+ for (int row = 0; row < defaultModel.rowCount(); ++row) {
+ QModelIndex left = proxy.index(row, 0, QModelIndex());
+ QModelIndex right = proxy.index(row, 1, QModelIndex());
+ QCOMPARE(left.sibling(left.row(), 1), right);
+ QCOMPARE(right.sibling(right.row(), 0), left);
+ }
+}
+
QTEST_MAIN(tst_QAbstractProxyModel)
#include "tst_qabstractproxymodel.moc"