summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/itemmodels
diff options
context:
space:
mode:
authorLuca Beldi <v.ronin@yahoo.it>2021-05-11 10:24:43 +0100
committerLuca Beldi <v.ronin@yahoo.it>2021-05-11 18:55:09 +0100
commit811a6c6b77a94d86e28a0b00079e02a863391108 (patch)
tree795e4b166480f413160acbe85c2523b8e116f894 /tests/auto/gui/itemmodels
parent0bbccfe001e005fb83ae0a9633bf11c4b3e25ce1 (diff)
Fix QStandardItemModel signals on takeChild
takeItem and takeChild do not signal the change correctly to the external world, this change fixes the problem Fixes: QTBUG-89145 Pick-to: 6.1 5.15 Change-Id: Ib4844ace53007068a2cd62eba64df99e6e45fdc0 Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'tests/auto/gui/itemmodels')
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp49
1 files changed, 48 insertions, 1 deletions
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index 343150d25d..7fc2c473de 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -137,7 +137,7 @@ private slots:
void taskQTBUG_45114_setItemData();
void setItemPersistentIndex();
-
+ void signalsOnTakeItem();
private:
QStandardItemModel *m_model = nullptr;
QPersistentModelIndex persistent;
@@ -1738,5 +1738,52 @@ void tst_QStandardItemModel::setItemPersistentIndex()
QVERIFY(!persistentIndex.isValid());
}
+void tst_QStandardItemModel::signalsOnTakeItem() // QTBUG-89145
+{
+ QStandardItemModel m;
+ m.insertColumns(0, 2);
+ m.insertRows(0, 5);
+ for (int i = 0; i < m.rowCount(); ++i) {
+ for (int j = 0; j < m.columnCount(); ++j)
+ m.setData(m.index(i, j), i + j);
+ }
+ const QModelIndex parentIndex = m.index(1, 0);
+ m.insertColumns(0, 2, parentIndex);
+ m.insertRows(0, 2, parentIndex);
+ for (int i = 0; i < m.rowCount(parentIndex); ++i) {
+ for (int j = 0; j < m.columnCount(parentIndex); ++j)
+ m.setData(m.index(i, j, parentIndex), i + j + 100);
+ }
+ QAbstractItemModelTester mTester(&m, nullptr);
+ QSignalSpy columnsRemovedSpy(&m, &QAbstractItemModel::columnsRemoved);
+ QSignalSpy columnsAboutToBeRemovedSpy(&m, &QAbstractItemModel::columnsAboutToBeRemoved);
+ QSignalSpy rowsRemovedSpy(&m, &QAbstractItemModel::rowsRemoved);
+ QSignalSpy rowsAboutToBeRemovedSpy(&m, &QAbstractItemModel::rowsAboutToBeRemoved);
+ QSignalSpy *const removeSpies[] = {&columnsRemovedSpy, &columnsAboutToBeRemovedSpy, &rowsRemovedSpy, &rowsAboutToBeRemovedSpy};
+ QSignalSpy dataChangedSpy(&m, &QAbstractItemModel::dataChanged);
+ QStandardItem *const takenItem = m.takeItem(1, 0);
+ for (auto &&spy : removeSpies) {
+ QCOMPARE(spy->count(), 1);
+ const auto spyArgs = spy->takeFirst();
+ QCOMPARE(spyArgs.at(0).value<QModelIndex>(), parentIndex);
+ QCOMPARE(spyArgs.at(1).toInt(), 0);
+ QCOMPARE(spyArgs.at(2).toInt(), 1);
+ }
+ QCOMPARE(dataChangedSpy.count(), 1);
+ const auto dataChangedSpyArgs = dataChangedSpy.takeFirst();
+ QCOMPARE(dataChangedSpyArgs.at(0).value<QModelIndex>(), m.index(1, 0));
+ QCOMPARE(dataChangedSpyArgs.at(1).value<QModelIndex>(), m.index(1, 0));
+ QCOMPARE(takenItem->data(Qt::EditRole).toInt(), 1);
+ QCOMPARE(takenItem->rowCount(), 2);
+ QCOMPARE(takenItem->columnCount(), 2);
+ for (int i = 0; i < 2; ++i) {
+ for (int j = 0; j < 2; ++j)
+ QCOMPARE(takenItem->child(i, j)->data(Qt::EditRole).toInt(), i + j + 100);
+ }
+ QCOMPARE(takenItem->model(), nullptr);
+ QCOMPARE(takenItem->child(0, 0)->model(), nullptr);
+ QCOMPARE(m.index(1, 0).data(), QVariant());
+}
+
QTEST_MAIN(tst_QStandardItemModel)
#include "tst_qstandarditemmodel.moc"