Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
dialogstestutils.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5
6#include <QtTest/qsignalspy.h>
7#include <QtQuick/private/qtquickglobal_p.h>
8#if QT_CONFIG(quick_listview)
9#include <QtQuick/private/qquicklistview_p.h>
10#endif
11#include <QtQuickTest/quicktest.h>
12#include <QtQuickControls2/qquickstyle.h>
13#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
14#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
15#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>
16#if QT_CONFIG(quick_listview)
17#include <QtQuickDialogs2QuickImpl/private/qquickfiledialogdelegate_p.h>
18#include <QtQuickDialogs2QuickImpl/private/qquickfolderbreadcrumbbar_p.h>
19#include <QtQuickDialogs2QuickImpl/private/qquickfolderbreadcrumbbar_p_p.h>
20#endif
21
23
24#if QT_CONFIG(quick_listview)
26 const QStringList &expectedFiles, QString &failureMessage)
27{
28 if (QQuickTest::qIsPolishScheduled(fileDialogListView)) {
29 if (!QQuickTest::qWaitForPolish(fileDialogListView)) {
30 failureMessage = QLatin1String("Failed to polish fileDialogListView");
31 return false;
32 }
33 }
34
35 QStringList actualFiles;
36 for (int i = 0; i < fileDialogListView->count(); ++i) {
37 auto delegate = qobject_cast<QQuickFileDialogDelegate*>(
39 if (!delegate) {
40 failureMessage = QString::fromLatin1("Delegate at index %1 is null").arg(i);
41 return false;
42 }
43
44 // Need to call absoluteFilePath on Windows; see comment in dialogtestutil.h.
45 actualFiles.append(QFileInfo(delegate->file().toLocalFile()).absoluteFilePath());
46 }
47
48 if (actualFiles != expectedFiles) {
49 QString expectedFilesStr = QDebug::toString(expectedFiles);
50 QString actualFilesStr = QDebug::toString(actualFiles);
51 failureMessage = QString::fromLatin1("Mismatch in actual vs expected "
52 "delegates in fileDialogListView:\n expected: %1\n actual: %2");
53 if (failureMessage.size() + expectedFilesStr.size() + actualFilesStr.size() > 1024) {
54 // If we've exceeded QTest's character limit for failure messages,
55 // just show the number of files.
56 expectedFilesStr = QString::number(expectedFiles.size());
57 actualFilesStr = QString::number(actualFiles.size());
58 }
59 failureMessage = failureMessage.arg(expectedFilesStr, actualFilesStr);
60 return false;
61 }
62
63 return true;
64}
65
67 const QUrl &expectedFolder, QString &failureMessage)
68{
69 if (!breadcrumbBar) {
70 failureMessage = QLatin1String("breadcrumbBar is null");
71 return false;
72 }
73
74 auto breadcrumbBarListView = qobject_cast<QQuickListView*>(breadcrumbBar->contentItem());
75 if (!breadcrumbBarListView) {
76 failureMessage = QLatin1String("breadcrumbBar's ListView is null");
77 return false;
78 }
79
80 if (QQuickTest::qIsPolishScheduled(breadcrumbBarListView)) {
81 if (!QQuickTest::qWaitForPolish(breadcrumbBarListView)) {
82 failureMessage = QLatin1String("Failed to polish breadcrumbBarListView");
83 return false;
84 }
85 }
86
87 QStringList actualCrumbs;
88 for (int i = 0; i < breadcrumbBarListView->count(); ++i) {
89 auto delegate = qobject_cast<QQuickAbstractButton*>(
90 QQuickVisualTestUtils::findViewDelegateItem(breadcrumbBarListView, i));
91 if (!delegate) {
92 // It's a separator or some other non-crumb item.
93 continue;
94 }
95
96 actualCrumbs.append(delegate->text());
97 }
98
100 for (int i = 0; i < expectedCrumbs.size(); ++i) {
101 QString &crumbPath = expectedCrumbs[i];
103 }
104
105 if (actualCrumbs != expectedCrumbs) {
106 failureMessage = QString::fromLatin1("Mismatch in actual vs expected "
107 "delegates in breadcrumbBarListView:\n expected: %1\n actual: %2")
108 .arg(QDebug::toString(expectedCrumbs), QDebug::toString(actualCrumbs));
109 return false;
110 }
111
112 return true;
113}
114#endif
115
117{
118 for (int i = 0; i < box->count(); ++i) {
119 auto button = qobject_cast<QQuickAbstractButton*>(box->itemAt(i));
120 if (button && button->text().toUpper() == buttonText.toUpper())
121 return button;
122 }
123 return nullptr;
124}
125
127{
128 for (int i = 0; i < textToEnter.size(); ++i) {
129 const QChar key = textToEnter.at(i);
130 QTest::keyClick(window, key.toLatin1());
131 }
132}
133
QString text
the text shown on the button
\inmodule QtCore
QString absoluteFilePath() const
QQuickItem * contentItem
static QStringList crumbPathsForFolder(const QUrl &folder)
static QString folderBaseName(const QString &folderPath)
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5871
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
Definition qstring.cpp:8870
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:8084
QString toUpper() const &
Definition qstring.h:439
\inmodule QtCore
Definition qurl.h:94
\inmodule QtGui
Definition qwindow.h:63
QPushButton * button
[2]
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)
Q_QMLTEST_EXPORT bool qWaitForPolish(const QQuickItem *item, int timeout=defaultTimeout)
Q_QMLTEST_EXPORT bool qIsPolishScheduled(const QQuickItem *item)
Definition quicktest.cpp:76
bool findViewDelegateItem(QQuickItemView *itemView, int index, T &delegateItem, FindViewDelegateItemFlags flags=FindViewDelegateItemFlag::PositionViewAtIndex)
Combined button and popup list for selecting options.
static void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier=Qt::NoModifier, int delay=-1)
GLuint64 key
GLsizei const GLint * box
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
aWidget window() -> setWindowTitle("New Window Title")
[2]