aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrolstestutils
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2021-11-01 15:44:24 +0100
committerMitch Curtis <mitch.curtis@qt.io>2021-12-10 23:36:44 +0100
commit5ba0e8229774d124ca15884962c32d30c0e81d0a (patch)
tree8bcfc9ef16b255dd4a036012cda554029f1be926 /src/quickcontrolstestutils
parent764972346aaf4326f382a67835fc4d67eab48ebb (diff)
Add FolderDialog
[ChangeLog][QtQuickDialogs] Added FolderDialog. This is a native FolderDialog on platforms that support it, and a non-native Qt Quick FolderDialog on platforms that don't. Task-number: QTBUG-87798 Change-Id: I95d872f450b528e54dd26f5421b6c5a4b71a9bc3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quickcontrolstestutils')
-rw-r--r--src/quickcontrolstestutils/CMakeLists.txt2
-rw-r--r--src/quickcontrolstestutils/dialogstestutils.cpp144
-rw-r--r--src/quickcontrolstestutils/dialogstestutils_p.h19
3 files changed, 165 insertions, 0 deletions
diff --git a/src/quickcontrolstestutils/CMakeLists.txt b/src/quickcontrolstestutils/CMakeLists.txt
index db7baa409f..3cb27c71e7 100644
--- a/src/quickcontrolstestutils/CMakeLists.txt
+++ b/src/quickcontrolstestutils/CMakeLists.txt
@@ -5,6 +5,7 @@ qt_internal_add_module(QuickControlsTestUtilsPrivate
SOURCES
controlstestutils.cpp
controlstestutils_p.h
+ dialogstestutils.cpp
dialogstestutils_p.h
qtest_quickcontrols_p.h
DEFINES
@@ -16,6 +17,7 @@ qt_internal_add_module(QuickControlsTestUtilsPrivate
Qt::QmlPrivate
Qt::Quick
Qt::QuickControls2
+ Qt::QuickDialogs2QuickImplPrivate
Qt::QuickPrivate
Qt::QuickTemplates2
Qt::QuickTemplates2Private
diff --git a/src/quickcontrolstestutils/dialogstestutils.cpp b/src/quickcontrolstestutils/dialogstestutils.cpp
new file mode 100644
index 0000000000..f989989a63
--- /dev/null
+++ b/src/quickcontrolstestutils/dialogstestutils.cpp
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#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::qWaitForItemPolished(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) {
+ failureMessage = QString::fromLatin1("Mismatch in actual vs expected "
+ "delegates in fileDialogListView:\n expected: %1\n actual: %2")
+ .arg(QDebug::toString(expectedFiles), QDebug::toString(actualFiles));
+ 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::qWaitForItemPolished(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
diff --git a/src/quickcontrolstestutils/dialogstestutils_p.h b/src/quickcontrolstestutils/dialogstestutils_p.h
index 2b301fc481..f358c1316f 100644
--- a/src/quickcontrolstestutils/dialogstestutils_p.h
+++ b/src/quickcontrolstestutils/dialogstestutils_p.h
@@ -77,6 +77,16 @@
QCOMPARE(actualPaths, expectedPaths); \
}
+QT_BEGIN_NAMESPACE
+class QWindow;
+
+class QQuickListView;
+
+class QQuickAbstractButton;
+
+class QQuickDialogButtonBox;
+class QQuickFolderBreadcrumbBar;
+
namespace QQuickDialogTestUtils
{
@@ -153,6 +163,15 @@ public:
QuickDialogType *quickDialog = nullptr;
};
+bool verifyFileDialogDelegates(QQuickListView *fileDialogListView, const QStringList &expectedFiles, QString &failureMessage);
+
+bool verifyBreadcrumbDelegates(QQuickFolderBreadcrumbBar *breadcrumbBar, const QUrl &expectedFolder, QString &failureMessage);
+
+QQuickAbstractButton *findDialogButton(QQuickDialogButtonBox *box, const QString &buttonText);
+
+void enterText(QWindow *window, const QString &textToEnter);
}
+QT_END_NAMESPACE
+
#endif // DIALOGSTESTUTILS_H