diff options
Diffstat (limited to 'tests/auto/quickdialogs')
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" |