aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2024-01-08 14:29:08 +0100
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2024-01-17 15:36:26 +0100
commitf737517ddb21e34f8929883dc0af5d58e42b999c (patch)
treea1c15df35ba213a31ad4af483f2e6bc6a02da2a0 /tests/auto/quick
parent957786ee4bc5a7b1c183cf3e02538e5022d2d462 (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.qml28
-rw-r--r--tests/auto/quick/qquickwindowcontainer/tst_qquickwindowcontainer.cpp43
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"