summaryrefslogtreecommitdiff
path: root/tests/auto/qquicktreemodeladaptor
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qquicktreemodeladaptor')
-rw-r--r--tests/auto/qquicktreemodeladaptor/tst_qquicktreemodeladaptor.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/auto/qquicktreemodeladaptor/tst_qquicktreemodeladaptor.cpp b/tests/auto/qquicktreemodeladaptor/tst_qquicktreemodeladaptor.cpp
index 5bec8c6d..34f1dbe1 100644
--- a/tests/auto/qquicktreemodeladaptor/tst_qquicktreemodeladaptor.cpp
+++ b/tests/auto/qquicktreemodeladaptor/tst_qquicktreemodeladaptor.cpp
@@ -69,6 +69,10 @@ private slots:
void removeRows_data();
void removeRows();
+ void removeRowsChildrenAndParent();
+ void removeChildrenMoveParent();
+ void removeChildrenRelayoutParent();
+
void insertRows_data();
void insertRows();
@@ -671,6 +675,127 @@ void tst_QQuickTreeModelAdaptor::removeRows()
}
}
+void tst_QQuickTreeModelAdaptor::removeRowsChildrenAndParent()
+{
+ TestModel model(ModelRowCount, 1);
+ QQuickTreeModelAdaptor tma;
+ tma.setModel(&model);
+
+ // Expand the first node
+ const QModelIndex &parent = model.index(0, 0);
+ tma.expand(parent);
+ QVERIFY(tma.isExpanded(parent));
+
+ QSignalSpy rowsAboutToBeRemovedSpy(&tma, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)));
+ QSignalSpy rowsRemovedSpy(&tma, SIGNAL(rowsRemoved(const QModelIndex&, int, int)));
+
+ // Remove the first node children
+ int expectedRemovedCount = model.rowCount(parent);
+ int tmaItemIdx = tma.itemIndex(model.index(0, 0, parent));
+ QCOMPARE(tmaItemIdx, tma.itemIndex(parent) + 1);
+ model.removeRows(0, expectedRemovedCount, parent);
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
+ QCOMPARE(rowsRemovedSpy.count(), 1);
+ QVariantList rowsAboutToBeRemovedArgs = rowsAboutToBeRemovedSpy.first();
+ QVariantList rowsRemovedArgs = rowsRemovedSpy.first();
+ QCOMPARE(rowsAboutToBeRemovedArgs, rowsRemovedArgs);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(0).toModelIndex(), QModelIndex());
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(1).toInt(), tmaItemIdx);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(2).toInt(), tmaItemIdx + expectedRemovedCount - 1);
+
+ // Remove the first node
+ rowsAboutToBeRemovedSpy.clear();
+ rowsRemovedSpy.clear();
+ model.removeRows(0, 1, QModelIndex());
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
+ QCOMPARE(rowsRemovedSpy.count(), 1);
+ rowsAboutToBeRemovedArgs = rowsAboutToBeRemovedSpy.first();
+ rowsRemovedArgs = rowsRemovedSpy.first();
+ QCOMPARE(rowsAboutToBeRemovedArgs, rowsRemovedArgs);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(0).toModelIndex(), QModelIndex());
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(1).toInt(), 0);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(2).toInt(), 0);
+}
+
+void tst_QQuickTreeModelAdaptor::removeChildrenMoveParent()
+{
+ TestModel model(ModelRowCount, 1);
+ QQuickTreeModelAdaptor tma;
+ tma.setModel(&model);
+
+ // Expand the first node
+ const QModelIndex &parent = model.index(0, 0);
+ tma.expand(parent);
+ QVERIFY(tma.isExpanded(parent));
+
+ // Remove the first node children
+ QSignalSpy rowsAboutToBeRemovedSpy(&tma, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)));
+ QSignalSpy rowsRemovedSpy(&tma, SIGNAL(rowsRemoved(const QModelIndex&, int, int)));
+ int expectedRemovedCount = model.rowCount(parent);
+ int tmaItemIdx = tma.itemIndex(model.index(0, 0, parent));
+ QCOMPARE(tmaItemIdx, tma.itemIndex(parent) + 1);
+ model.removeRows(0, expectedRemovedCount, parent);
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
+ QCOMPARE(rowsRemovedSpy.count(), 1);
+ QVariantList rowsAboutToBeRemovedArgs = rowsAboutToBeRemovedSpy.first();
+ QVariantList rowsRemovedArgs = rowsRemovedSpy.first();
+ QCOMPARE(rowsAboutToBeRemovedArgs, rowsRemovedArgs);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(0).toModelIndex(), QModelIndex());
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(1).toInt(), tmaItemIdx);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(2).toInt(), tmaItemIdx + expectedRemovedCount - 1);
+
+ // Move the first node
+ QSignalSpy rowsAboutToBeMovedSpy(&tma, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)));
+ QSignalSpy rowsMovedSpy(&tma, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)));
+ model.moveRows(QModelIndex(), 0, 1, QModelIndex(), 3);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
+ QCOMPARE(rowsRemovedSpy.count(), 1);
+ QVariantList rowsAboutToBeMovedArgs = rowsAboutToBeMovedSpy.first();
+ QVariantList rowsMovedArgs = rowsMovedSpy.first();
+ QCOMPARE(rowsAboutToBeMovedArgs, rowsMovedArgs);
+ QCOMPARE(rowsAboutToBeMovedArgs.at(0).toModelIndex(), QModelIndex());
+ QCOMPARE(rowsAboutToBeMovedArgs.at(1).toInt(), 0);
+ QCOMPARE(rowsAboutToBeMovedArgs.at(2).toInt(), 0);
+ QCOMPARE(rowsAboutToBeMovedArgs.at(3).toModelIndex(), QModelIndex());
+ QCOMPARE(rowsAboutToBeMovedArgs.at(4).toInt(), 3);
+}
+
+void tst_QQuickTreeModelAdaptor::removeChildrenRelayoutParent()
+{
+ TestModel model(ModelRowCount, 1);
+ QQuickTreeModelAdaptor tma;
+ tma.setModel(&model);
+
+ // Expand the first node
+ const QModelIndex &parent = model.index(0, 0);
+ tma.expand(parent);
+ QVERIFY(tma.isExpanded(parent));
+
+ QSignalSpy rowsAboutToBeRemovedSpy(&tma, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)));
+ QSignalSpy rowsRemovedSpy(&tma, SIGNAL(rowsRemoved(const QModelIndex&, int, int)));
+
+ // Remove the first node children
+ int expectedRemovedCount = model.rowCount(parent);
+ int tmaItemIdx = tma.itemIndex(model.index(0, 0, parent));
+ QCOMPARE(tmaItemIdx, tma.itemIndex(parent) + 1);
+ model.removeRows(0, expectedRemovedCount, parent);
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
+ QCOMPARE(rowsRemovedSpy.count(), 1);
+ QVariantList rowsAboutToBeRemovedArgs = rowsAboutToBeRemovedSpy.first();
+ QVariantList rowsRemovedArgs = rowsRemovedSpy.first();
+ QCOMPARE(rowsAboutToBeRemovedArgs, rowsRemovedArgs);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(0).toModelIndex(), QModelIndex());
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(1).toInt(), tmaItemIdx);
+ QCOMPARE(rowsAboutToBeRemovedArgs.at(2).toInt(), tmaItemIdx + expectedRemovedCount - 1);
+
+ // Relayout the first node
+ QSignalSpy dataChanged(&tma, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)));
+ QList<QPersistentModelIndex> parents;
+ parents << parent;
+ model.changeLayout(parents);
+ QCOMPARE(dataChanged.count(), 0);
+}
+
void tst_QQuickTreeModelAdaptor::insertRows_data()
{
QTest::addColumn<int>("insertFromRow");