diff options
Diffstat (limited to 'tests/auto/quick/qquickrepeater')
-rw-r--r-- | tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp b/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp index 171e3301d9..0fb2416808 100644 --- a/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp +++ b/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp @@ -74,6 +74,7 @@ private slots: void itemModel(); void resetModel(); void modelChanged(); + void modelReset(); void properties(); void asynchronous(); void initParent(); @@ -543,6 +544,84 @@ void tst_QQuickRepeater::modelChanged() delete rootObject; } +void tst_QQuickRepeater::modelReset() +{ + QaimModel model; + + QQmlEngine engine; + QQmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("testData", &model); + + QQmlComponent component(&engine, testFileUrl("repeater2.qml")); + QScopedPointer<QObject> object(component.create()); + QQuickItem *rootItem = qobject_cast<QQuickItem *>(object.data()); + QVERIFY(rootItem); + + QQuickRepeater *repeater = findItem<QQuickRepeater>(rootItem, "repeater"); + QVERIFY(repeater != 0); + QQuickItem *container = findItem<QQuickItem>(rootItem, "container"); + QVERIFY(container != 0); + + QCOMPARE(repeater->count(), 0); + + QSignalSpy countSpy(repeater, SIGNAL(countChanged())); + QSignalSpy addedSpy(repeater, SIGNAL(itemAdded(int,QQuickItem*))); + QSignalSpy removedSpy(repeater, SIGNAL(itemRemoved(int,QQuickItem*))); + + + QList<QPair<QString, QString> > items = QList<QPair<QString, QString> >() + << qMakePair(QString::fromLatin1("one"), QString::fromLatin1("1")) + << qMakePair(QString::fromLatin1("two"), QString::fromLatin1("2")) + << qMakePair(QString::fromLatin1("three"), QString::fromLatin1("3")); + + model.resetItems(items); + + QCOMPARE(countSpy.count(), 1); + QCOMPARE(removedSpy.count(), 0); + QCOMPARE(addedSpy.count(), items.count()); + for (int i = 0; i< items.count(); i++) { + QCOMPARE(addedSpy.at(i).at(0).toInt(), i); + QCOMPARE(addedSpy.at(i).at(1).value<QQuickItem*>(), repeater->itemAt(i)); + } + + countSpy.clear(); + addedSpy.clear(); + + model.reset(); + QCOMPARE(countSpy.count(), 0); + QCOMPARE(removedSpy.count(), 3); + QCOMPARE(addedSpy.count(), 3); + for (int i = 0; i< items.count(); i++) { + QCOMPARE(addedSpy.at(i).at(0).toInt(), i); + QCOMPARE(addedSpy.at(i).at(1).value<QQuickItem*>(), repeater->itemAt(i)); + } + + addedSpy.clear(); + removedSpy.clear(); + + items.append(qMakePair(QString::fromLatin1("four"), QString::fromLatin1("4"))); + items.append(qMakePair(QString::fromLatin1("five"), QString::fromLatin1("5"))); + + model.resetItems(items); + QCOMPARE(countSpy.count(), 1); + QCOMPARE(removedSpy.count(), 3); + QCOMPARE(addedSpy.count(), 5); + for (int i = 0; i< items.count(); i++) { + QCOMPARE(addedSpy.at(i).at(0).toInt(), i); + QCOMPARE(addedSpy.at(i).at(1).value<QQuickItem*>(), repeater->itemAt(i)); + } + + countSpy.clear(); + addedSpy.clear(); + removedSpy.clear(); + + items.clear(); + model.resetItems(items); + QCOMPARE(countSpy.count(), 1); + QCOMPARE(removedSpy.count(), 5); + QCOMPARE(addedSpy.count(), 0); +} + void tst_QQuickRepeater::properties() { QQmlEngine engine; |