diff options
Diffstat (limited to 'tests/auto/quick/qquickitem/tst_qquickitem.cpp')
-rw-r--r-- | tests/auto/quick/qquickitem/tst_qquickitem.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp index a1d9d0c73b..6f11986e20 100644 --- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp +++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp @@ -169,6 +169,7 @@ private slots: void acceptedMouseButtons(); void visualParentOwnership(); + void visualParentOwnershipWindow(); private: @@ -1821,6 +1822,63 @@ void tst_qquickitem::visualParentOwnership() } } +void tst_qquickitem::visualParentOwnershipWindow() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("visualParentOwnershipWindow.qml")); + + QQuickWindow *window = qobject_cast<QQuickWindow*>(component.create()); + QVERIFY(window); + QQuickItem *root = window->contentItem(); + + QVariant newObject; + { + QVERIFY(QMetaObject::invokeMethod(window, "createItemWithoutParent", Q_RETURN_ARG(QVariant, newObject))); + QPointer<QQuickItem> newItem = qvariant_cast<QQuickItem*>(newObject); + QVERIFY(!newItem.isNull()); + + QVERIFY(!newItem->parent()); + QVERIFY(!newItem->parentItem()); + + newItem->setParentItem(root); + + gc(engine); + + QVERIFY(!newItem.isNull()); + newItem->setParentItem(0); + + gc(engine); + QVERIFY(newItem.isNull()); + } + { + QVERIFY(QMetaObject::invokeMethod(window, "createItemWithoutParent", Q_RETURN_ARG(QVariant, newObject))); + QPointer<QQuickItem> firstItem = qvariant_cast<QQuickItem*>(newObject); + QVERIFY(!firstItem.isNull()); + + firstItem->setParentItem(root); + + QVERIFY(QMetaObject::invokeMethod(window, "createItemWithoutParent", Q_RETURN_ARG(QVariant, newObject))); + QPointer<QQuickItem> secondItem = qvariant_cast<QQuickItem*>(newObject); + QVERIFY(!firstItem.isNull()); + + secondItem->setParentItem(firstItem); + + gc(engine); + + delete firstItem; + + window->setProperty("keepAliveProperty", newObject); + + gc(engine); + QVERIFY(!secondItem.isNull()); + + window->setProperty("keepAliveProperty", QVariant()); + + gc(engine); + QVERIFY(secondItem.isNull()); + } +} + QTEST_MAIN(tst_qquickitem) #include "tst_qquickitem.moc" |