summaryrefslogtreecommitdiffstats
path: root/src/testlib/qabstractitemmodeltester.cpp
diff options
context:
space:
mode:
authorAndreas Buhr <andreas.buhr@qt.io>2022-02-16 11:34:27 +0100
committerAndreas Buhr <andreas.buhr@qt.io>2022-02-23 14:42:27 +0100
commit2f6faca901442631299af0c0d15b3edf257f225b (patch)
tree9106564bf9ab89bc4b5e983c1df01eec29b51b0d /src/testlib/qabstractitemmodeltester.cpp
parent3ab49ee04087536835c9cdc0b00e4a7d26c7395c (diff)
Add tests to QAbstractItemModelTester checking only one change in flight
This patch adds checks to QAbstractItemModelTester checking that only one change is in flight at a time. Change-Id: I15fe1ad1274649aa652ed6489a889df72c8a8292 Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/testlib/qabstractitemmodeltester.cpp')
-rw-r--r--src/testlib/qabstractitemmodeltester.cpp206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp
index 9582361b4f..fd211b3fc5 100644
--- a/src/testlib/qabstractitemmodeltester.cpp
+++ b/src/testlib/qabstractitemmodeltester.cpp
@@ -77,10 +77,28 @@ public:
void data();
void runAllTests();
+
void layoutAboutToBeChanged();
void layoutChanged();
+
+ void modelAboutToBeReset();
+ void modelReset();
+
+ void columnsAboutToBeInserted(const QModelIndex &parent, int first, int last);
+ void columnsInserted(const QModelIndex &parent, int first, int last);
+ void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd,
+ const QModelIndex &destinationParent, int destinationColumn);
+ void columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination,
+ int column);
+ void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last);
+ void columnsRemoved(const QModelIndex &parent, int first, int last);
+
void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end);
void rowsInserted(const QModelIndex &parent, int start, int end);
+ void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd,
+ const QModelIndex &destinationParent, int destinationRow);
+ void rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination,
+ int row);
void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
void rowsRemoved(const QModelIndex &parent, int start, int end);
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
@@ -110,6 +128,19 @@ private:
bool fetchingMore;
+ enum class ChangeInFlight {
+ None,
+ ColumnsInserted,
+ ColumnsMoved,
+ ColumnsRemoved,
+ LayoutChanged,
+ ModelReset,
+ RowsInserted,
+ RowsMoved,
+ RowsRemoved
+ };
+ ChangeInFlight changeInFlight = ChangeInFlight::None;
+
QList<QPersistentModelIndex> changing;
};
@@ -252,14 +283,45 @@ QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, Fa
connect(model, &QAbstractItemModel::layoutChanged,
this, [d]{ d->layoutChanged(); });
+ // column operations
+ connect(model, &QAbstractItemModel::columnsAboutToBeInserted,
+ this, [d](const QModelIndex &parent, int start, int end) { d->columnsAboutToBeInserted(parent, start, end); });
+ connect(model, &QAbstractItemModel::columnsAboutToBeMoved,
+ this, [d](const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) {
+ d->columnsAboutToBeMoved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationColumn); });
+ connect(model, &QAbstractItemModel::columnsAboutToBeRemoved,
+ this, [d](const QModelIndex &parent, int start, int end) { d->columnsAboutToBeRemoved(parent, start, end); });
+ connect(model, &QAbstractItemModel::columnsInserted,
+ this, [d](const QModelIndex &parent, int start, int end) { d->columnsInserted(parent, start, end); });
+ connect(model, &QAbstractItemModel::columnsMoved,
+ this, [d](const QModelIndex &parent, int start, int end, const QModelIndex &destination, int col) {
+ d->columnsMoved(parent, start, end, destination, col); });
+ connect(model, &QAbstractItemModel::columnsRemoved,
+ this, [d](const QModelIndex &parent, int start, int end) { d->columnsRemoved(parent, start, end); });
+
+ // row operations
connect(model, &QAbstractItemModel::rowsAboutToBeInserted,
this, [d](const QModelIndex &parent, int start, int end) { d->rowsAboutToBeInserted(parent, start, end); });
+ connect(model, &QAbstractItemModel::rowsAboutToBeMoved,
+ this, [d](const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) {
+ d->rowsAboutToBeMoved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationRow); });
connect(model, &QAbstractItemModel::rowsAboutToBeRemoved,
this, [d](const QModelIndex &parent, int start, int end) { d->rowsAboutToBeRemoved(parent, start, end); });
connect(model, &QAbstractItemModel::rowsInserted,
this, [d](const QModelIndex &parent, int start, int end) { d->rowsInserted(parent, start, end); });
+ connect(model, &QAbstractItemModel::rowsMoved,
+ this, [d](const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row) {
+ d->rowsMoved(parent, start, end, destination, row); });
connect(model, &QAbstractItemModel::rowsRemoved,
this, [d](const QModelIndex &parent, int start, int end) { d->rowsRemoved(parent, start, end); });
+
+ // reset
+ connect(model, &QAbstractItemModel::modelAboutToBeReset,
+ this, [d]() { d->modelAboutToBeReset(); });
+ connect(model, &QAbstractItemModel::modelReset,
+ this, [d]() { d->modelReset(); });
+
+ // data
connect(model, &QAbstractItemModel::dataChanged,
this, [d](const QModelIndex &topLeft, const QModelIndex &bottomRight) { d->dataChanged(topLeft, bottomRight); });
connect(model, &QAbstractItemModel::headerDataChanged,
@@ -631,6 +693,89 @@ void QAbstractItemModelTesterPrivate::data()
return;
}
+void QAbstractItemModelTesterPrivate::columnsAboutToBeInserted(const QModelIndex &parent, int start,
+ int end)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::ColumnsInserted;
+
+ qCDebug(lcModelTest) << "columnsAboutToBeInserted"
+ << "start=" << start << "end=" << end << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent)
+ << "last before insertion=" << model->index(start - 1, 0, parent)
+ << model->data(model->index(start - 1, 0, parent));
+}
+
+void QAbstractItemModelTesterPrivate::columnsInserted(const QModelIndex &parent, int first,
+ int last)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::ColumnsInserted);
+ changeInFlight = ChangeInFlight::None;
+
+ qCDebug(lcModelTest) << "columnsInserted"
+ << "start=" << first << "end=" << last << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent);
+}
+
+void QAbstractItemModelTesterPrivate::columnsAboutToBeMoved(const QModelIndex &sourceParent,
+ int sourceStart, int sourceEnd,
+ const QModelIndex &destinationParent,
+ int destinationColumn)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::ColumnsMoved;
+
+ qCDebug(lcModelTest) << "columnsAboutToBeMoved"
+ << "sourceStart=" << sourceStart << "sourceEnd=" << sourceEnd
+ << "sourceParent=" << sourceParent
+ << "sourceParent data=" << model->data(sourceParent).toString()
+ << "destinationParent=" << destinationParent
+ << "destinationColumn=" << destinationColumn;
+}
+
+void QAbstractItemModelTesterPrivate::columnsMoved(const QModelIndex &sourceParent, int sourceStart,
+ int sourceEnd,
+ const QModelIndex &destinationParent,
+ int destinationColumn)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::ColumnsMoved);
+ changeInFlight = ChangeInFlight::None;
+
+ qCDebug(lcModelTest) << "columnsAboutToBeMoved"
+ << "sourceStart=" << sourceStart << "sourceEnd=" << sourceEnd
+ << "sourceParent=" << sourceParent
+ << "sourceParent data=" << model->data(sourceParent).toString()
+ << "destinationParent=" << destinationParent
+ << "destinationColumn=" << destinationColumn;
+}
+
+void QAbstractItemModelTesterPrivate::columnsAboutToBeRemoved(const QModelIndex &parent, int first,
+ int last)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::ColumnsRemoved;
+
+ qCDebug(lcModelTest) << "columnsAboutToBeRemoved"
+ << "start=" << first << "end=" << last << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent)
+ << "last before removal=" << model->index(first - 1, 0, parent)
+ << model->data(model->index(first - 1, 0, parent));
+}
+
+void QAbstractItemModelTesterPrivate::columnsRemoved(const QModelIndex &parent, int first, int last)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::ColumnsRemoved);
+ changeInFlight = ChangeInFlight::None;
+
+ qCDebug(lcModelTest) << "columnsRemoved"
+ << "start=" << first << "end=" << last << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent);
+}
+
/*
Store what is about to be inserted to make sure it actually happens
@@ -638,6 +783,9 @@ void QAbstractItemModelTesterPrivate::data()
*/
void QAbstractItemModelTesterPrivate::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::RowsInserted;
+
qCDebug(lcModelTest) << "rowsAboutToBeInserted"
<< "start=" << start << "end=" << end << "parent=" << parent
<< "parent data=" << model->data(parent).toString()
@@ -659,6 +807,9 @@ void QAbstractItemModelTesterPrivate::rowsAboutToBeInserted(const QModelIndex &p
*/
void QAbstractItemModelTesterPrivate::rowsInserted(const QModelIndex &parent, int start, int end)
{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::RowsInserted);
+ changeInFlight = ChangeInFlight::None;
+
qCDebug(lcModelTest) << "rowsInserted"
<< "start=" << start << "end=" << end << "parent=" << parent
<< "parent data=" << model->data(parent).toString()
@@ -689,14 +840,51 @@ void QAbstractItemModelTesterPrivate::rowsInserted(const QModelIndex &parent, in
}
}
+void QAbstractItemModelTesterPrivate::rowsAboutToBeMoved(const QModelIndex &sourceParent,
+ int sourceStart, int sourceEnd,
+ const QModelIndex &destinationParent,
+ int destinationRow)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::RowsMoved;
+
+ qCDebug(lcModelTest) << "rowsAboutToBeMoved"
+ << "sourceStart=" << sourceStart << "sourceEnd=" << sourceEnd
+ << "sourceParent=" << sourceParent
+ << "sourceParent data=" << model->data(sourceParent).toString()
+ << "destinationParent=" << destinationParent
+ << "destinationColumn=" << destinationRow;
+}
+
+void QAbstractItemModelTesterPrivate::rowsMoved(const QModelIndex &sourceParent, int sourceStart,
+ int sourceEnd, const QModelIndex &destinationParent,
+ int destinationRow)
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::RowsMoved);
+ changeInFlight = ChangeInFlight::None;
+
+ qCDebug(lcModelTest) << "rowsMoved"
+ << "sourceStart=" << sourceStart << "sourceEnd=" << sourceEnd
+ << "sourceParent=" << sourceParent
+ << "sourceParent data=" << model->data(sourceParent).toString()
+ << "destinationParent=" << destinationParent
+ << "destinationColumn=" << destinationRow;
+}
+
void QAbstractItemModelTesterPrivate::layoutAboutToBeChanged()
{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::LayoutChanged;
+
for (int i = 0; i < qBound(0, model->rowCount(), 100); ++i)
changing.append(QPersistentModelIndex(model->index(i, 0)));
}
void QAbstractItemModelTesterPrivate::layoutChanged()
{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::LayoutChanged);
+ changeInFlight = ChangeInFlight::None;
+
for (int i = 0; i < changing.count(); ++i) {
QPersistentModelIndex p = changing[i];
MODELTESTER_COMPARE(model->index(p.row(), p.column(), p.parent()), QModelIndex(p));
@@ -704,6 +892,18 @@ void QAbstractItemModelTesterPrivate::layoutChanged()
changing.clear();
}
+void QAbstractItemModelTesterPrivate::modelAboutToBeReset()
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::ModelReset;
+}
+
+void QAbstractItemModelTesterPrivate::modelReset()
+{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::ModelReset);
+ changeInFlight = ChangeInFlight::None;
+}
+
/*
Store what is about to be inserted to make sure it actually happens
@@ -711,6 +911,9 @@ void QAbstractItemModelTesterPrivate::layoutChanged()
*/
void QAbstractItemModelTesterPrivate::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::None);
+ changeInFlight = ChangeInFlight::RowsRemoved;
+
qCDebug(lcModelTest) << "rowsAboutToBeRemoved"
<< "start=" << start << "end=" << end << "parent=" << parent
<< "parent data=" << model->data(parent).toString()
@@ -741,6 +944,9 @@ void QAbstractItemModelTesterPrivate::rowsAboutToBeRemoved(const QModelIndex &pa
*/
void QAbstractItemModelTesterPrivate::rowsRemoved(const QModelIndex &parent, int start, int end)
{
+ MODELTESTER_COMPARE(changeInFlight, ChangeInFlight::RowsRemoved);
+ changeInFlight = ChangeInFlight::None;
+
qCDebug(lcModelTest) << "rowsRemoved"
<< "start=" << start << "end=" << end << "parent=" << parent
<< "parent data=" << model->data(parent).toString()