aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quickdialogs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quickdialogs')
-rw-r--r--tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindow.qml27
-rw-r--r--tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindowVisibleTrue.qml28
-rw-r--r--tests/auto/quickdialogs/qquickcolordialogimpl/data/windowSwapping.qml58
-rw-r--r--tests/auto/quickdialogs/qquickcolordialogimpl/tst_qquickcolordialogimpl.cpp58
4 files changed, 171 insertions, 0 deletions
diff --git a/tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindow.qml b/tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindow.qml
new file mode 100644
index 0000000000..5b9bab708c
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindow.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+Rectangle {
+ width: 480
+ height: 640
+ color: dialog.selectedColor
+
+ property alias dialog: dialog
+
+ function doneAccepted() {
+ dialog.done(ColorDialog.Accepted)
+ }
+
+ function doneRejected() {
+ dialog.done(ColorDialog.Rejected)
+ }
+
+ ColorDialog {
+ id: dialog
+ objectName: "ColorDialog"
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindowVisibleTrue.qml b/tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindowVisibleTrue.qml
new file mode 100644
index 0000000000..b146d61513
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickcolordialogimpl/data/colorDialogWithoutWindowVisibleTrue.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+Rectangle {
+ width: 480
+ height: 640
+ color: dialog.selectedColor
+
+ property alias dialog: dialog
+
+ function doneAccepted() {
+ dialog.done(ColorDialog.Accepted)
+ }
+
+ function doneRejected() {
+ dialog.done(ColorDialog.Rejected)
+ }
+
+ ColorDialog {
+ id: dialog
+ objectName: "ColorDialog"
+ visible: true
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickcolordialogimpl/data/windowSwapping.qml b/tests/auto/quickdialogs/qquickcolordialogimpl/data/windowSwapping.qml
new file mode 100644
index 0000000000..5215feb243
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickcolordialogimpl/data/windowSwapping.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+Window {
+ width: 480
+ height: 640
+
+ property alias dialog: dialog
+
+ function getSubWindow1 () {
+ return subwindow1
+ }
+
+ function getSubWindow2 () {
+ return subwindow2
+ }
+
+ function goToSubWindow1() {
+ dialog.close()
+ dialog.parentWindow = subwindow1
+ dialog.open()
+ }
+
+ function goToSubWindow2() {
+ dialog.close()
+ dialog.parentWindow = subwindow2
+ dialog.open()
+ }
+
+ function resetParentWindow() {
+ dialog.close()
+ dialog.parentWindow = undefined
+ dialog.open()
+ }
+
+ Window {
+ id: subwindow1
+ width: 480
+ height: 640
+ visible: true
+ }
+
+ Window {
+ id: subwindow2
+ width: 480
+ height: 640
+ visible: true
+ }
+
+ ColorDialog {
+ id: dialog
+ objectName: "ColorDialog"
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickcolordialogimpl/tst_qquickcolordialogimpl.cpp b/tests/auto/quickdialogs/qquickcolordialogimpl/tst_qquickcolordialogimpl.cpp
index 23f1e6844b..c93ef3d12f 100644
--- a/tests/auto/quickdialogs/qquickcolordialogimpl/tst_qquickcolordialogimpl.cpp
+++ b/tests/auto/quickdialogs/qquickcolordialogimpl/tst_qquickcolordialogimpl.cpp
@@ -4,6 +4,7 @@
#include <QtTest/qtest.h>
#include <QtQuickTest/quicktest.h>
#include <QtTest/qsignalspy.h>
+#include <QtQuick/qquickview.h>
#include <QtQuick/private/qquicklistview_p.h>
#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
#include <QtQuickControlsTestUtils/private/dialogstestutils_p.h>
@@ -53,6 +54,9 @@ private slots:
void changeColorFromTextFields();
void windowTitle_data();
void windowTitle();
+ void workingInsideQQuickViewer_data();
+ void workingInsideQQuickViewer();
+ void dialogCanMoveBetweenWindows();
private:
bool closePopup(DialogTestHelper<QQuickColorDialog, QQuickColorDialogImpl> *dialogHelper,
@@ -456,6 +460,60 @@ void tst_QQuickColorDialogImpl::windowTitle()
CLOSE_DIALOG("Ok");
}
+void tst_QQuickColorDialogImpl::workingInsideQQuickViewer_data()
+{
+ QTest::addColumn<bool>("initialVisible");
+ QTest::addColumn<QString>("urlToQmlFile");
+ QTest::newRow("visible: false") << false << "colorDialogWithoutWindow.qml";
+ QTest::newRow("visible: true") << true << "colorDialogWithoutWindowVisibleTrue.qml";
+}
+
+void tst_QQuickColorDialogImpl::workingInsideQQuickViewer() // QTBUG-106598
+{
+ QFETCH(bool, initialVisible);
+ QFETCH(QString, urlToQmlFile);
+
+ QQuickView dialogView;
+ dialogView.setSource(testFileUrl(urlToQmlFile));
+ dialogView.show();
+
+ auto dialog = dialogView.findChild<QQuickColorDialog *>("ColorDialog");
+ QVERIFY(dialog);
+ QCOMPARE(dialog->isVisible(), initialVisible);
+
+ dialog->open();
+ QVERIFY(dialog->isVisible());
+}
+
+void tst_QQuickColorDialogImpl::dialogCanMoveBetweenWindows()
+{
+ DialogTestHelper<QQuickColorDialog, QQuickColorDialogImpl> dialogHelper(this, "windowSwapping.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QCOMPARE(dialogHelper.quickDialog->parent(), dialogHelper.window());
+ QVariant subWindow1;
+ QVariant subWindow2;
+
+ QMetaObject::invokeMethod(dialogHelper.window(), "getSubWindow1", Q_RETURN_ARG(QVariant, subWindow1));
+ QMetaObject::invokeMethod(dialogHelper.window(), "getSubWindow2", Q_RETURN_ARG(QVariant, subWindow2));
+
+ // Confirm that the dialog can swap to different windows
+ QMetaObject::invokeMethod(dialogHelper.window(), "goToSubWindow1");
+ QCOMPARE(dialogHelper.dialog->parentWindow(), qvariant_cast<QQuickWindow *>(subWindow1));
+
+ QMetaObject::invokeMethod(dialogHelper.window(), "goToSubWindow2");
+ QCOMPARE(dialogHelper.dialog->parentWindow(), qvariant_cast<QQuickWindow *>(subWindow2));
+
+ QMetaObject::invokeMethod(dialogHelper.window(), "resetParentWindow");
+ QCOMPARE(dialogHelper.quickDialog->parent(), dialogHelper.window());
+
+ CLOSE_DIALOG("Ok");
+}
+
QTEST_MAIN(tst_QQuickColorDialogImpl)
#include "tst_qquickcolordialogimpl.moc"