4#ifndef DIALOGSTESTUTILS_H
5#define DIALOGSTESTUTILS_H
18#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
20#include <QtTest/qtest.h>
21#include <QtTest/private/qtestresult_p.h>
22#include <QtQml/qqmlfileselector.h>
23#include <QtQuickControls2/qquickstyle.h>
24#include <QtQuickTest/QtQuickTest>
25#include <QtQuickTestUtils/private/qmlutils_p.h>
26#include <QtQuickTestUtils/private/visualtestutils_p.h>
30#define COMPARE_URL(url1, url2)
31 QCOMPARE(QFileInfo(url1.toLocalFile()).canonicalFilePath(), QFileInfo(url2.toLocalFile()).canonicalFilePath());
36#define COMPARE_URLS(actualUrls, expectedUrls) \
37{
38 const QList<QUrl> actualUrlsCopy = actualUrls;
39 QList<QString> actualPaths;
40 std::transform(actualUrlsCopy.begin(), actualUrlsCopy.end(), std::back_insert_iterator(actualPaths),
41 [](const QUrl &url) { return QFileInfo(url.toLocalFile()).canonicalFilePath(); });
42 const QList<QUrl> expectedUrlsCopy = expectedUrls;
43 QList<QString> expectedPaths;
44 std::transform(expectedUrlsCopy.begin(), expectedUrlsCopy.end(), std::back_insert_iterator(expectedPaths),
45 [](const QUrl &url) { return QFileInfo(url.toLocalFile()).canonicalFilePath(); });
46 QCOMPARE(actualPaths, expectedPaths); \
47}
49#define OPEN_QUICK_DIALOG() QVERIFY2
50 (dialogHelper.isWindowInitialized(), dialogHelper.failureMessage()); QVERIFY
51 (dialogHelper.waitForWindowActive()); QVERIFY
52 (dialogHelper.openDialog()); QTRY_VERIFY
53 (dialogHelper.isQuickDialogOpen());
55#define CLOSE_QUICK_DIALOG()
57 dialogHelper.dialog->close();
58 QVERIFY(!dialogHelper.dialog->isVisible());
59 QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
67class QQuickAbstractButton;
69class QQuickDialogButtonBox;
70class QQuickFolderBreadcrumbBar;
76template<
typename DialogType,
typename QuickDialogType>
81 const QStringList &qmlImportPaths = {},
const QVariantMap &initialProperties = {}) :
91 fileSelector =
new QQmlFileSelector(&appHelper.engine);
93 dialog = appHelper.window->property(
"dialog").value<DialogType*>();
95 appHelper.errorMessage =
"\"dialog\" property is not valid";
99 appHelper.window->show();
100 appHelper.window->requestActivate();
110 return appHelper.ready;
115 return QTest::qWaitForWindowActive(appHelper.window);
119
120
121
125 if (!
dialog->isVisible()) {
126 appHelper.errorMessage =
"Dialog is not visible";
133 quickDialog = appHelper.window->findChild<QuickDialogType*>();
135 appHelper.errorMessage =
"Can't find Qt Quick-based dialog";
151 QByteArray msg(
"Dialog wasn't open, when {} was called");
152 msg.replace(
"{}",
__func__);
153 appHelper.errorMessage = msg;
156 QQuickWindow *dialogPopupWindow = popupWindow();
157 if (!dialogPopupWindow)
159 dialogPopupWindow->requestActivate();
160 if (!QTest::qWaitForWindowActive(dialogPopupWindow))
162 return QQuickTest::qWaitForPolish(dialogPopupWindow);
172 return appHelper.window;
177 return appHelper.errorMessage.constData();
190QQuickAbstractButton *
findDialogButton(QQuickDialogButtonBox *box,
const QString &buttonText);
192void enterText(QWindow *window,
const QString &textToEnter);
195#define QTEST_QUICKDIALOGS_MAIN(TestCase) int
196 main(int argc, char *argv[]) \
197{
198 qputenv("QML_NO_TOUCH_COMPRESSION", "1");
199 QGuiApplication app(argc, argv);
201 QTEST_SET_MAIN_SOURCE_PATH
203 QTest::qInit(&tc, argc, argv);
204 const QByteArray testObjectName = QTestResult::currentTestObjectName();
206 const QStringList allStyles = {"Basic", "Fusion", "Material", "Universal"};
207 const QStringList styles = qEnvironmentVariableIsSet("QT_QUICK_CONTROLS_STYLE") ? QStringList{qEnvironmentVariable("QT_QUICK_CONTROLS_STYLE")} : allStyles;
208 for (const QString &style : styles) {
209 qmlClearTypeRegistrations();
210 QQuickStyle::setStyle(style);
211 testName = testObjectName + "::" + style.toLocal8Bit();
212 QTestResult::setCurrentTestObject(testName);
213 res += QTest::qRun();
215 QTestResult::setCurrentTestObject(testObjectName);
218}
QQmlFileSelector * fileSelector
const char * failureMessage() const
QuickDialogType * quickDialog
QQuickWindow * window() const
Q_REQUIRED_RESULT bool isWindowInitialized() const
bool isQuickDialogOpen() const
virtual bool openDialog()
DialogTestHelper(QQmlDataTest *testCase, const QString &testFilePath, const QStringList &qmlImportPaths={}, const QVariantMap &initialProperties={})
Q_REQUIRED_RESULT bool waitForWindowActive()
QQuickWindow * popupWindow() const
Q_REQUIRED_RESULT bool waitForPopupWindowActiveAndPolished()
QQuickVisualTestUtils::QQuickApplicationHelper appHelper
void enterText(QWindow *window, const QString &textToEnter)
QQuickAbstractButton * findDialogButton(QQuickDialogButtonBox *box, const QString &buttonText)
bool verifyBreadcrumbDelegates(QQuickFolderBreadcrumbBar *breadcrumbBar, const QUrl &expectedFolder, QString &failureMessage)
bool verifyFileDialogDelegates(QQuickListView *fileDialogListView, const QStringList &expectedFiles, QString &failureMessage)