diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-01-08 14:29:08 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-01-17 15:36:26 +0100 |
commit | f737517ddb21e34f8929883dc0af5d58e42b999c (patch) | |
tree | a1c15df35ba213a31ad4af483f2e6bc6a02da2a0 /tests/auto/quick | |
parent | 957786ee4bc5a7b1c183cf3e02538e5022d2d462 (diff) |
WindowContainer: Add test for window containers as components
Similar to tst_qqmlcomponent::qmlCreateObjectAutoParent(), but testing the
specific behaviors of a window contained inside another item or window.
Pick-to: 6.7
Change-Id: I63052e04390896349ad679601ccbad7d7a48da1b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/quick')
-rw-r--r-- | tests/auto/quick/qquickwindowcontainer/data/windowComponent.qml | 28 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindowcontainer/tst_qquickwindowcontainer.cpp | 43 |
2 files changed, 71 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickwindowcontainer/data/windowComponent.qml b/tests/auto/quick/qquickwindowcontainer/data/windowComponent.qml new file mode 100644 index 0000000000..48a067030b --- /dev/null +++ b/tests/auto/quick/qquickwindowcontainer/data/windowComponent.qml @@ -0,0 +1,28 @@ +import QtQuick + +Window { + Item { id: itemParent; objectName: "itemParent" } + Window { id: windowParent; objectName: "windowParent" } + + property QtObject window_item: null + property QtObject window_window: null + + property QtObject window_item_parent: null + property QtObject window_window_parent: null + + Component { id: windowComponent; Window{} } + + Component.onCompleted: { + // Windows created with QObjects, Items, or Windows as their parent + // do not their visual parent set via auto-parenting -- only their + // transient parent. + window_item = windowComponent.createObject(itemParent); + window_window = windowComponent.createObject(windowParent); + + // A visual parent must be set explicitly + window_item_parent = windowComponent.createObject(itemParent); + window_item_parent.parent = itemParent; + window_window_parent = windowComponent.createObject(windowParent); + window_window_parent.parent = windowParent; + } +} diff --git a/tests/auto/quick/qquickwindowcontainer/tst_qquickwindowcontainer.cpp b/tests/auto/quick/qquickwindowcontainer/tst_qquickwindowcontainer.cpp index b546bc9d71..57aa502205 100644 --- a/tests/auto/quick/qquickwindowcontainer/tst_qquickwindowcontainer.cpp +++ b/tests/auto/quick/qquickwindowcontainer/tst_qquickwindowcontainer.cpp @@ -35,6 +35,7 @@ private slots: void windowDestroyed(); void windowLifetimeFollowsContainer(); void deferredVisibilityWithoutWindow(); + void windowComponent(); private: std::unique_ptr<QQmlApplicationEngine> m_engine; @@ -144,6 +145,48 @@ void tst_QQuickWindowContainer::deferredVisibilityWithoutWindow() QCOMPARE(spy.count(), 1); } +void tst_QQuickWindowContainer::windowComponent() +{ + auto *root = qobject_cast<QQuickWindow *>(m_engine->rootObjects().first()); + QVERIFY(root); + auto *itemParent = root->findChild<QQuickItem*>("itemParent"); + auto *windowParent = root->findChild<QQuickWindow*>("windowParent"); + QVERIFY(itemParent); + QVERIFY(windowParent); + + root->setVisible(true); + QVERIFY(QQuickTest::qWaitForPolish(root)); + windowParent->setVisible(true); + QVERIFY(QQuickTest::qWaitForPolish(windowParent)); + + QObject *window_item = root->property("window_item").value<QObject*>(); + QObject *window_window = root->property("window_window").value<QObject*>(); + QObject *window_item_parent = root->property("window_item_parent").value<QObject*>(); + QObject *window_window_parent = root->property("window_window_parent").value<QObject*>(); + + QVERIFY(window_item); + QVERIFY(window_window); + QVERIFY(window_item_parent); + QVERIFY(window_window_parent); + + QCOMPARE(window_item->parent(), itemParent); + QCOMPARE(window_window->parent(), windowParent); + QCOMPARE(window_item_parent->parent(), root); + QCOMPARE(window_window_parent->parent(), windowParent); + + QCOMPARE(qobject_cast<QQuickWindow *>(window_item)->transientParent(), root); + QCOMPARE(qobject_cast<QQuickWindow *>(window_window)->transientParent(), windowParent); + QCOMPARE(qobject_cast<QQuickWindow *>(window_item)->parent(), nullptr); + QCOMPARE(qobject_cast<QQuickWindow *>(window_window)->parent(), nullptr); + + QEXPECT_FAIL("", "The automatic transient parent logic doesn't account for visual parent", Continue); + QCOMPARE(qobject_cast<QQuickWindow *>(window_item_parent)->transientParent(), nullptr); + QEXPECT_FAIL("", "The automatic transient parent logic doesn't account for visual parent", Continue); + QCOMPARE(qobject_cast<QQuickWindow *>(window_window_parent)->transientParent(), nullptr); + QCOMPARE(qobject_cast<QQuickWindow *>(window_item_parent)->parent(), root); + QCOMPARE(qobject_cast<QQuickWindow *>(window_window_parent)->parent(), windowParent); +} + QTEST_MAIN(tst_QQuickWindowContainer) #include "tst_qquickwindowcontainer.moc" |