From 72e0d699cec09458ca9325035d477d4899e8e47b Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 23 Oct 2020 19:07:05 +0200 Subject: QAbstractItemModelTester: don't rely on hasChildren() Dynamic models which use fetchMore to asynchronously fill subdirs (like KDirModel) return true in hasChildren() for dirs that are expected to have children (so that the "+" shows in the treeview) but do not actually have children readily available. They will be inserted later on once the async listing job is done (as a result of fetchMore triggering that job). So QAbstractItemModelTester should use rowCount instead, to find out if there are children present. This detected a bug in QConcatenateTablesProxyModel: it returned a non-zero rowCount for its items, while it's flat. Change-Id: Idcdc86159f1fc79ed5297075dfcf30c09896287a Pick-to: 5.15 Reviewed-by: Volker Hilsheimer --- src/testlib/qabstractitemmodeltester.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/testlib') diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp index 58f7b94c66..dd643c8945 100644 --- a/src/testlib/qabstractitemmodeltester.cpp +++ b/src/testlib/qabstractitemmodeltester.cpp @@ -438,7 +438,7 @@ void QAbstractItemModelTesterPrivate::parent() // when asked for the parent of an invalid index. MODELTESTER_VERIFY(!model->parent(QModelIndex()).isValid()); - if (!model->hasChildren()) + if (model->rowCount() == 0) return; // Column 0 | Column 1 | @@ -449,11 +449,12 @@ void QAbstractItemModelTesterPrivate::parent() // Common error test #1, make sure that a top level index has a parent // that is a invalid QModelIndex. QModelIndex topIndex = model->index(0, 0, QModelIndex()); + MODELTESTER_VERIFY(topIndex.isValid()); MODELTESTER_VERIFY(!model->parent(topIndex).isValid()); // Common error test #2, make sure that a second level index has a parent // that is the first level index. - if (model->hasChildren(topIndex)) { + if (model->rowCount(topIndex) > 0) { QModelIndex childIndex = model->index(0, 0, topIndex); MODELTESTER_VERIFY(childIndex.isValid()); MODELTESTER_COMPARE(model->parent(childIndex), topIndex); @@ -465,7 +466,7 @@ void QAbstractItemModelTesterPrivate::parent() if (model->hasIndex(0, 1)) { QModelIndex topIndex1 = model->index(0, 1, QModelIndex()); MODELTESTER_VERIFY(topIndex1.isValid()); - if (model->hasChildren(topIndex) && model->hasChildren(topIndex1)) { + if (model->rowCount(topIndex) > 0 && model->rowCount(topIndex1) > 0) { QModelIndex childIndex = model->index(0, 0, topIndex); MODELTESTER_VERIFY(childIndex.isValid()); QModelIndex childIndex1 = model->index(0, 0, topIndex1); @@ -583,7 +584,7 @@ void QAbstractItemModelTesterPrivate::checkChildren(const QModelIndex &parent, i */ void QAbstractItemModelTesterPrivate::data() { - if (!model->hasChildren()) + if (model->rowCount() == 0 || model->columnCount() == 0) return; MODELTESTER_VERIFY(model->index(0, 0).isValid()); -- cgit v1.2.3