summaryrefslogtreecommitdiffstats
path: root/src/testlib
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2018-06-25 15:50:35 +0200
committerDavid Faure <david.faure@kdab.com>2018-06-27 10:11:35 +0000
commit27ea5a65dd3fdabdad1569f5330f90248cdca4f5 (patch)
tree0f98161577c58f2aea7d983533329b9f4d45008f /src/testlib
parent74be42ca598c4f13486191c0b8c58bee3d1f1090 (diff)
QAbstractItemModelTester: fix out-of-bounds index() calls
When removing rows, the tester is looking at the data of the row "just before" and the row "just after" the removed rows, to see if they are still the same at the end of the removal operation. Guard this with bounds check, in case there is no row just before or just after. This is the opportunity to use modeltester in tst_qidentityproxymodel, which was already a testcase for removing the only row in a given parent. Change-Id: Iec8228c16b9c670b794e2665356d153679178494 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'src/testlib')
-rw-r--r--src/testlib/qabstractitemmodeltester.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp
index e970be2c8d..04fa99bc4d 100644
--- a/src/testlib/qabstractitemmodeltester.cpp
+++ b/src/testlib/qabstractitemmodeltester.cpp
@@ -712,8 +712,17 @@ void QAbstractItemModelTesterPrivate::rowsAboutToBeRemoved(const QModelIndex &pa
Changing c;
c.parent = parent;
c.oldSize = model->rowCount(parent);
- c.last = model->data(model->index(start - 1, 0, parent));
- c.next = model->data(model->index(end + 1, 0, parent));
+ if (start > 0) {
+ const QModelIndex startIndex = model->index(start - 1, 0, parent);
+ MODELTESTER_VERIFY(startIndex.isValid());
+ c.last = model->data(startIndex);
+ }
+ if (end < c.oldSize - 1) {
+ const QModelIndex endIndex = model->index(end + 1, 0, parent);
+ MODELTESTER_VERIFY(endIndex.isValid());
+ c.next = model->data(endIndex);
+ }
+
remove.push(c);
}
@@ -732,8 +741,10 @@ void QAbstractItemModelTesterPrivate::rowsRemoved(const QModelIndex &parent, int
Changing c = remove.pop();
MODELTESTER_COMPARE(parent, c.parent);
MODELTESTER_COMPARE(model->rowCount(parent), c.oldSize - (end - start + 1));
- MODELTESTER_COMPARE(model->data(model->index(start - 1, 0, c.parent)), c.last);
- MODELTESTER_COMPARE(model->data(model->index(start, 0, c.parent)), c.next);
+ if (start > 0)
+ MODELTESTER_COMPARE(model->data(model->index(start - 1, 0, c.parent)), c.last);
+ if (end < c.oldSize - 1)
+ MODELTESTER_COMPARE(model->data(model->index(start, 0, c.parent)), c.next);
}
void QAbstractItemModelTesterPrivate::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)