diff options
Diffstat (limited to 'tests/auto/quickdialogs/qquickmessagedialogimpl/tst_qquickmessagedialogimpl.cpp')
-rw-r--r-- | tests/auto/quickdialogs/qquickmessagedialogimpl/tst_qquickmessagedialogimpl.cpp | 99 |
1 files changed, 98 insertions, 1 deletions
diff --git a/tests/auto/quickdialogs/qquickmessagedialogimpl/tst_qquickmessagedialogimpl.cpp b/tests/auto/quickdialogs/qquickmessagedialogimpl/tst_qquickmessagedialogimpl.cpp index b2f3d6456c..92af0036ba 100644 --- a/tests/auto/quickdialogs/qquickmessagedialogimpl/tst_qquickmessagedialogimpl.cpp +++ b/tests/auto/quickdialogs/qquickmessagedialogimpl/tst_qquickmessagedialogimpl.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtTest/qtest.h> #include <QtTest/qsignalspy.h> @@ -8,6 +8,7 @@ #include <QtQuickDialogs2QuickImpl/private/qquickmessagedialogimpl_p.h> #include <QtQuickTest/quicktest.h> #include <QtQuickControls2/qquickstyle.h> +#include <QtQuickTemplates2/private/qquickdialog_p_p.h> #include <QtQuickControlsTestUtils/private/controlstestutils_p.h> #include <QtQuickControlsTestUtils/private/dialogstestutils_p.h> @@ -39,6 +40,7 @@ private slots: void changeInformativeText(); void changeStandardButtons(); void detailedText(); + void resultReflectsLastStandardButtonPressed(); }; // We don't want to fail on warnings until QTBUG-98964 is fixed, @@ -269,6 +271,101 @@ void tst_QQuickMessageDialogImpl::detailedText() dialogHelper.dialog->close(); } +void tst_QQuickMessageDialogImpl::resultReflectsLastStandardButtonPressed() +{ + DialogTestHelper<QQuickMessageDialog, QQuickMessageDialogImpl> dialogHelper( + this, "messageDialogWithButtons.qml"); + QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage()); + QVERIFY(dialogHelper.waitForWindowActive()); + + QVERIFY(dialogHelper.openDialog()); + QTRY_VERIFY(dialogHelper.isQuickDialogOpen()); + + QSignalSpy acceptedSpy(dialogHelper.dialog, SIGNAL(accepted())); + QSignalSpy rejectedSpy(dialogHelper.dialog, SIGNAL(rejected())); + QSignalSpy resultChangedSpy(dialogHelper.dialog, SIGNAL(resultChanged())); + + auto buttonBox = dialogHelper.quickDialog->findChild<QQuickDialogButtonBox *>("buttonBox"); + QVERIFY(buttonBox); + + QQuickTest::qWaitForPolish(dialogHelper.window()); + + bool yesFound = false; + bool noFound = false; + bool discardFound = false; + bool applyFound = false; + + int expectedNumberOfAcceptedSignals = 0; + int expectedNumberOfRejectedSignals = 0; + + // The dialogButtonBox has different layouts depending on platform. This tries to account for all possible layouts. + // If the role of a button is YesRole, AcceptRole, NoRole or RejectRole, then pressing that button should emit accepted, or rejected. + // And since this is a MessageDialog, the result property should reflect the last button pressed, rather than the StandardCode. + for (int i = 0; i < buttonBox->count(); ++i) { + auto button = qobject_cast<QQuickAbstractButton *>(buttonBox->itemAt(i)); + switch (QQuickDialogPrivate::buttonRole(button)) { + case QPlatformDialogHelper::YesRole: + yesFound = true; + expectedNumberOfAcceptedSignals++; + + QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, button->mapToScene({ button->width() / 2, button->height() / 2 }).toPoint()); + QTRY_VERIFY(!dialogHelper.isQuickDialogOpen()); + + QCOMPARE(dialogHelper.dialog->result(), QPlatformDialogHelper::StandardButton::Yes); + QCOMPARE(resultChangedSpy.count(), i + 1); + + QVERIFY(dialogHelper.openDialog()); + QTRY_VERIFY(dialogHelper.isQuickDialogOpen()); + break; + case QPlatformDialogHelper::NoRole: + noFound = true; + expectedNumberOfRejectedSignals++; + + QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, button->mapToScene({ button->width() / 2, button->height() / 2 }).toPoint()); + QTRY_VERIFY(!dialogHelper.isQuickDialogOpen()); + + QCOMPARE(dialogHelper.dialog->result(), QPlatformDialogHelper::StandardButton::No); + QCOMPARE(resultChangedSpy.count(), i + 1); + + QVERIFY(dialogHelper.openDialog()); + QTRY_VERIFY(dialogHelper.isQuickDialogOpen()); + break; + case QPlatformDialogHelper::DestructiveRole: + discardFound = true; + + QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, button->mapToScene({ button->width() / 2, button->height() / 2 }).toPoint()); + QTRY_VERIFY(!dialogHelper.isQuickDialogOpen()); + + QCOMPARE(dialogHelper.dialog->result(), QPlatformDialogHelper::StandardButton::Discard); + QCOMPARE(resultChangedSpy.count(), i + 1); + + QVERIFY(dialogHelper.openDialog()); + QTRY_VERIFY(dialogHelper.isQuickDialogOpen()); + break; + case QPlatformDialogHelper::ApplyRole: + applyFound = true; + + QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, button->mapToScene({ button->width() / 2, button->height() / 2 }).toPoint()); + QTRY_VERIFY(!dialogHelper.isQuickDialogOpen()); + + QCOMPARE(dialogHelper.dialog->result(), QPlatformDialogHelper::StandardButton::Apply); + QCOMPARE(resultChangedSpy.count(), i + 1); + + QVERIFY(dialogHelper.openDialog()); + QTRY_VERIFY(dialogHelper.isQuickDialogOpen()); + break; + default: + QFAIL(qPrintable(QStringLiteral("Unexpected role %1").arg(QQuickDialogPrivate::buttonRole(button)))); + } + } + + QVERIFY2(yesFound && noFound && discardFound && applyFound, "A button that was expected to be present, wasn't found when iterating over all of them."); + QCOMPARE(acceptedSpy.count(), expectedNumberOfAcceptedSignals); + QCOMPARE(rejectedSpy.count(), expectedNumberOfRejectedSignals); + + dialogHelper.dialog->close(); +} + QTEST_MAIN(tst_QQuickMessageDialogImpl) #include "tst_qquickmessagedialogimpl.moc" |