diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-12-08 17:52:35 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-12 05:40:30 +0100 |
commit | b156b5d8c313f3b3711b1da6e06768473db3cf12 (patch) | |
tree | aba1c52e8052b9fb61918e6458d74949bfc156e0 /tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp | |
parent | 18ce33ecd994666d42e438c4aa62302c72465458 (diff) |
Fix package items not being destroyed when a package is destroyed.
The views parent the delegate items to themselves on creation, before
we delete the package we need to reparent them back to it or they'll
persist indefinately.
Change-Id: I01a36fadb2b0ff1035de46ec2b84a54d73c49bcf
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp')
-rw-r--r-- | tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp b/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp index af3af57436..1389a530e0 100644 --- a/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp +++ b/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp @@ -133,6 +133,7 @@ private slots: void noDelegate(); void itemsDestroyed_data(); void itemsDestroyed(); + void packagesDestroyed(); void qaimRowsMoved(); void qaimRowsMoved_data(); void remove_data(); @@ -174,7 +175,7 @@ private: bool failed; QDeclarativeEngine engine; template<typename T> - T *findItem(QQuickItem *parent, const QString &objectName, int index); + T *findItem(QQuickItem *parent, const QString &objectName, int index = -1); }; Q_DECLARE_METATYPE(QDeclarativeChangeSet) @@ -663,6 +664,73 @@ void tst_qquickvisualdatamodel::itemsDestroyed() QVERIFY(!delegate); } +void tst_qquickvisualdatamodel::packagesDestroyed() +{ + SingleRoleModel model; + model.list.clear(); + for (int i=0; i<30; i++) + model.list << ("item " + i); + + QQuickView view; + view.rootContext()->setContextProperty("testModel", &model); + + QString filename(TESTDATA("packageView.qml")); + view.setSource(QUrl::fromLocalFile(filename)); + + qApp->processEvents(); + + QQuickListView *leftview = findItem<QQuickListView>(view.rootObject(), "leftList"); + QTRY_VERIFY(leftview != 0); + + QQuickListView *rightview = findItem<QQuickListView>(view.rootObject(), "rightList"); + QTRY_VERIFY(rightview != 0); + + QQuickItem *leftContent = leftview->contentItem(); + QTRY_VERIFY(leftContent != 0); + + QQuickItem *rightContent = rightview->contentItem(); + QTRY_VERIFY(rightContent != 0); + + QCOMPARE(leftview->currentIndex(), 0); + QCOMPARE(rightview->currentIndex(), 20); + + QDeclarativeGuard<QQuickItem> left; + QDeclarativeGuard<QQuickItem> right; + + QVERIFY(findItem<QQuickItem>(leftContent, "wrapper", 1)); + QVERIFY(findItem<QQuickItem>(rightContent, "wrapper", 1)); + + QVERIFY(left = findItem<QQuickItem>(leftContent, "wrapper", 19)); + QVERIFY(right = findItem<QQuickItem>(rightContent, "wrapper", 19)); + + rightview->setCurrentIndex(0); + QCOMPARE(rightview->currentIndex(), 0); + + QTRY_COMPARE(rightview->contentY(), 0.0); + QCoreApplication::sendPostedEvents(); + + QVERIFY(!left); + QVERIFY(!right); + + QVERIFY(left = findItem<QQuickItem>(leftContent, "wrapper", 1)); + QVERIFY(right = findItem<QQuickItem>(rightContent, "wrapper", 1)); + + rightview->setCurrentIndex(20); + QTRY_COMPARE(rightview->contentY(), 100.0); + + QVERIFY(left); + QVERIFY(right); + + QVERIFY(findItem<QQuickItem>(leftContent, "wrapper", 19)); + QVERIFY(findItem<QQuickItem>(rightContent, "wrapper", 19)); + + leftview->setCurrentIndex(20); + QTRY_COMPARE(leftview->contentY(), 100.0); + + QVERIFY(!left); + QVERIFY(!right); +} + void tst_qquickvisualdatamodel::qaimRowsMoved() { // Test parameters passed in QAIM::rowsMoved() signal are converted correctly |