1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "dialogstestutils_p.h"
#include <QtTest/qsignalspy.h>
#include <QtQuick/private/qquicklistview_p.h>
#include <QtQuickTest/quicktest.h>
#include <QtQuickControls2/qquickstyle.h>
#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>
#include <QtQuickDialogs2QuickImpl/private/qquickfiledialogdelegate_p.h>
#include <QtQuickDialogs2QuickImpl/private/qquickfolderbreadcrumbbar_p.h>
#include <QtQuickDialogs2QuickImpl/private/qquickfolderbreadcrumbbar_p_p.h>
QT_BEGIN_NAMESPACE
bool QQuickDialogTestUtils::verifyFileDialogDelegates(QQuickListView *fileDialogListView,
const QStringList &expectedFiles, QString &failureMessage)
{
if (QQuickTest::qIsPolishScheduled(fileDialogListView)) {
if (!QQuickTest::qWaitForPolish(fileDialogListView)) {
failureMessage = QLatin1String("Failed to polish fileDialogListView");
return false;
}
}
QStringList actualFiles;
for (int i = 0; i < fileDialogListView->count(); ++i) {
auto delegate = qobject_cast<QQuickFileDialogDelegate*>(
QQuickVisualTestUtils::findViewDelegateItem(fileDialogListView, i));
if (!delegate) {
failureMessage = QString::fromLatin1("Delegate at index %1 is null").arg(i);
return false;
}
// Need to call absoluteFilePath on Windows; see comment in dialogtestutil.h.
actualFiles.append(QFileInfo(delegate->file().toLocalFile()).absoluteFilePath());
}
if (actualFiles != expectedFiles) {
QString expectedFilesStr = QDebug::toString(expectedFiles);
QString actualFilesStr = QDebug::toString(actualFiles);
failureMessage = QString::fromLatin1("Mismatch in actual vs expected "
"delegates in fileDialogListView:\n expected: %1\n actual: %2");
if (failureMessage.size() + expectedFilesStr.size() + actualFilesStr.size() > 1024) {
// If we've exceeded QTest's character limit for failure messages,
// just show the number of files.
expectedFilesStr = QString::number(expectedFiles.size());
actualFilesStr = QString::number(actualFiles.size());
}
failureMessage = failureMessage.arg(expectedFilesStr, actualFilesStr);
return false;
}
return true;
}
bool QQuickDialogTestUtils::verifyBreadcrumbDelegates(QQuickFolderBreadcrumbBar *breadcrumbBar,
const QUrl &expectedFolder, QString &failureMessage)
{
if (!breadcrumbBar) {
failureMessage = QLatin1String("breadcrumbBar is null");
return false;
}
auto breadcrumbBarListView = qobject_cast<QQuickListView*>(breadcrumbBar->contentItem());
if (!breadcrumbBarListView) {
failureMessage = QLatin1String("breadcrumbBar's ListView is null");
return false;
}
if (QQuickTest::qIsPolishScheduled(breadcrumbBarListView)) {
if (!QQuickTest::qWaitForPolish(breadcrumbBarListView)) {
failureMessage = QLatin1String("Failed to polish breadcrumbBarListView");
return false;
}
}
QStringList actualCrumbs;
for (int i = 0; i < breadcrumbBarListView->count(); ++i) {
auto delegate = qobject_cast<QQuickAbstractButton*>(
QQuickVisualTestUtils::findViewDelegateItem(breadcrumbBarListView, i));
if (!delegate) {
// It's a separator or some other non-crumb item.
continue;
}
actualCrumbs.append(delegate->text());
}
QStringList expectedCrumbs = QQuickFolderBreadcrumbBarPrivate::crumbPathsForFolder(expectedFolder);
for (int i = 0; i < expectedCrumbs.size(); ++i) {
QString &crumbPath = expectedCrumbs[i];
crumbPath = QQuickFolderBreadcrumbBarPrivate::folderBaseName(crumbPath);
}
if (actualCrumbs != expectedCrumbs) {
failureMessage = QString::fromLatin1("Mismatch in actual vs expected "
"delegates in breadcrumbBarListView:\n expected: %1\n actual: %2")
.arg(QDebug::toString(expectedCrumbs), QDebug::toString(actualCrumbs));
return false;
}
return true;
}
QQuickAbstractButton *QQuickDialogTestUtils::findDialogButton(QQuickDialogButtonBox *box, const QString &buttonText)
{
for (int i = 0; i < box->count(); ++i) {
auto button = qobject_cast<QQuickAbstractButton*>(box->itemAt(i));
if (button && button->text().toUpper() == buttonText.toUpper())
return button;
}
return nullptr;
}
void QQuickDialogTestUtils::enterText(QWindow *window, const QString &textToEnter)
{
for (int i = 0; i < textToEnter.size(); ++i) {
const QChar key = textToEnter.at(i);
QTest::keyClick(window, key.toLatin1());
}
}
QT_END_NAMESPACE
|