diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-12-05 15:27:00 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-05 10:13:00 +0100 |
commit | 1817efd1ddaf459e5e2b001c7aa81522e13e7098 (patch) | |
tree | 3a36b30d90b3df832a35cb939607385697682059 /tests | |
parent | 42ba473b3a1af1d6e0579dfc0ddb6c571c76d6c0 (diff) |
Don't attempt to destroy a null persisted item.
Persisted items are still only constructed on demand so we can't
assume the object is non null.
Change-Id: I1ce9563eb3b9fb1ae611e8afcf9c8c74f0563aec
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qtquick2/qquickvisualdatamodel/data/create.qml | 7 | ||||
-rw-r--r-- | tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp | 42 |
2 files changed, 31 insertions, 18 deletions
diff --git a/tests/auto/qtquick2/qquickvisualdatamodel/data/create.qml b/tests/auto/qtquick2/qquickvisualdatamodel/data/create.qml index 3475a0dace..9f4b754552 100644 --- a/tests/auto/qtquick2/qquickvisualdatamodel/data/create.qml +++ b/tests/auto/qtquick2/qquickvisualdatamodel/data/create.qml @@ -4,6 +4,8 @@ ListView { width: 200 height: 200 + property var persistentHandle + model: VisualDataModel { id: visualModel @@ -15,11 +17,6 @@ ListView { objectName: "delegate" width: 200 height: 20 - - property bool destroyed: false - - - Component.onDestruction: destroyed = true } } } diff --git a/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp b/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp index f0e6228d29..9e27a202b2 100644 --- a/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp +++ b/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp @@ -1708,7 +1708,7 @@ void tst_qquickvisualdatamodel::create() QCOMPARE(listview->count(), 20); - QQuickItem *delegate; + QDeclarativeGuard<QQuickItem> delegate; // persistedItems.includeByDefault is true, so all items belong to persistedItems initially. QVERIFY(delegate = findItem<QQuickItem>(contentItem, "delegate", 1)); @@ -1725,55 +1725,60 @@ void tst_qquickvisualdatamodel::create() // Request an item instantiated by the view. QVERIFY(delegate = qobject_cast<QQuickItem *>(evaluate<QObject *>(visualModel, "items.create(1)"))); - QCOMPARE(delegate, findItem<QQuickItem>(contentItem, "delegate", 1)); + QCOMPARE(delegate.data(), findItem<QQuickItem>(contentItem, "delegate", 1)); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), true); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 1); evaluate<void>(delegate, "VisualDataModel.inPersistedItems = false"); QCOMPARE(listview->count(), 20); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), false); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(delegate); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), false); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 0); // Request an item not instantiated by the view. QVERIFY(!findItem<QQuickItem>(contentItem, "delegate", 15)); QVERIFY(delegate = qobject_cast<QQuickItem *>(evaluate<QObject *>(visualModel, "items.create(15)"))); - QCOMPARE(delegate, findItem<QQuickItem>(contentItem, "delegate", 15)); + QCOMPARE(delegate.data(), findItem<QQuickItem>(contentItem, "delegate", 15)); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), true); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 1); evaluate<void>(visualModel, "persistedItems.remove(0)"); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), true); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(!delegate); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 0); // Request an item not instantiated by the view, then scroll the view so it will request it. QVERIFY(!findItem<QQuickItem>(contentItem, "delegate", 16)); QVERIFY(delegate = qobject_cast<QQuickItem *>(evaluate<QObject *>(visualModel, "items.create(16)"))); - QCOMPARE(delegate, findItem<QQuickItem>(contentItem, "delegate", 16)); + QCOMPARE(delegate.data(), findItem<QQuickItem>(contentItem, "delegate", 16)); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), true); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 1); evaluate<void>(listview, "positionViewAtIndex(19, ListView.End)"); QCOMPARE(listview->count(), 20); evaluate<void>(delegate, "VisualDataModel.groups = [\"items\"]"); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), false); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(delegate); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), false); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 0); // Request and release an item instantiated by the view, then scroll the view so it releases it. QVERIFY(findItem<QQuickItem>(contentItem, "delegate", 17)); QVERIFY(delegate = qobject_cast<QQuickItem *>(evaluate<QObject *>(visualModel, "items.create(17)"))); - QCOMPARE(delegate, findItem<QQuickItem>(contentItem, "delegate", 17)); + QCOMPARE(delegate.data(), findItem<QQuickItem>(contentItem, "delegate", 17)); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), true); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 1); evaluate<void>(visualModel, "items.removeGroups(17, \"persistedItems\")"); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), false); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(delegate); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), false); QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 0); evaluate<void>(listview, "positionViewAtIndex(1, ListView.Beginning)"); QCOMPARE(listview->count(), 20); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), true); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(!delegate); // Adding an item to the persistedItems group won't instantiate it, but if later requested by // the view it will be persisted. @@ -1784,13 +1789,24 @@ void tst_qquickvisualdatamodel::create() QCOMPARE(listview->count(), 20); QVERIFY(delegate = findItem<QQuickItem>(contentItem, "delegate", 18)); QCOMPARE(evaluate<bool>(delegate, "VisualDataModel.inPersistedItems"), true); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), false); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(delegate); evaluate<void>(listview, "positionViewAtIndex(1, ListView.Beginning)"); QCOMPARE(listview->count(), 20); - QCOMPARE(evaluate<bool>(delegate, "destroyed"), false); + QCoreApplication::sendPostedEvents(delegate, QEvent::DeferredDelete); + QVERIFY(delegate); + + // Remove an uninstantiated but cached item from the persistedItems group. + evaluate<void>(visualModel, "items.addGroups(19, \"persistedItems\")"); + QCOMPARE(evaluate<int>(visualModel, "persistedItems.count"), 2); + QVERIFY(!findItem<QQuickItem>(contentItem, "delegate", 19)); + // Store a reference to the item so it is retained in the cache. + evaluate<void>(visualModel, "persistentHandle = items.get(19)"); + QCOMPARE(evaluate<bool>(visualModel, "persistentHandle.inPersistedItems"), true); + evaluate<void>(visualModel, "items.removeGroups(19, \"persistedItems\")"); + QCOMPARE(evaluate<bool>(visualModel, "persistentHandle.inPersistedItems"), false); } - void tst_qquickvisualdatamodel::incompleteModel() { // VisualDataModel is first populated in componentComplete. Verify various functions are |