aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2022-05-18 14:27:11 +0800
committerMitch Curtis <mitch.curtis@qt.io>2022-07-06 20:19:02 +0800
commita2370b0298e01cf4178044dc28a48d8212be4fd6 (patch)
tree8e78db01f383e536bcef8c8237e210da45e54522 /tests
parent405e12b171f444c4ada02b6ab4dc84f10a7b8b42 (diff)
tst_qquickfiledialogimpl: refactor duplicated code into helpers
Change-Id: I1445d41dbbbe346506195c160e87d0b05770d22c Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io> (cherry picked from commit f047980dea361479865975c716736fdf46fd109c)
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp475
1 files changed, 185 insertions, 290 deletions
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp b/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
index 9cc58377b3..e8b0701fb2 100644
--- a/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
@@ -188,47 +188,105 @@ void tst_QQuickFileDialogImpl::cleanupTestCase()
QDir::setCurrent(oldCurrentDir.path());
}
-void tst_QQuickFileDialogImpl::defaults()
+#define VERIFY_FILE_SELECTED(expectedCurrentFolderUrl, expectedCurrentFileUrl) \
+{ \
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), expectedCurrentFileUrl); \
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { expectedCurrentFileUrl }); \
+ /* We also test the deprecated currentFile* API until it's removed. */ \
+ COMPARE_URL(dialogHelper.dialog->currentFile(), expectedCurrentFileUrl); \
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { expectedCurrentFileUrl }); \
+ COMPARE_URL(dialogHelper.quickDialog->selectedFile(), expectedCurrentFileUrl); \
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), expectedCurrentFolderUrl); \
+ COMPARE_URL(dialogHelper.quickDialog->currentFolder(), expectedCurrentFolderUrl); \
+}
+
+#define VERIFY_DELEGATE_CURRENT(expectedCurrentFileUrl, expectedCurrentIndex) \
+{ \
+ QTRY_COMPARE(dialogHelper.fileDialogListView->currentIndex(), expectedCurrentIndex); \
+ QQuickFileDialogDelegate *fileDelegate = nullptr; \
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, expectedCurrentIndex, fileDelegate)); \
+ COMPARE_URL(fileDelegate->file(), expectedCurrentFileUrl); \
+}
+
+#define VERIFY_DELEGATE_FOCUSED(expectedCurrentIndex) \
+{ \
+ QTRY_COMPARE(dialogHelper.fileDialogListView->currentIndex(), expectedCurrentIndex); \
+ QQuickFileDialogDelegate *fileDelegate = nullptr; \
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, expectedCurrentIndex, fileDelegate)); \
+ QVERIFY2(fileDelegate->hasActiveFocus(), qPrintable(QString::fromLatin1( \
+ "Expected delegate at index %1 to have focus, but %2 has it") \
+ .arg(QString::number(expectedCurrentIndex)) \
+ .arg(QDebug::toString(dialogHelper.window()->activeFocusItem())))); \
+ QVERIFY(fileDelegate->isHighlighted()); \
+}
+
+/*
+ Checks that currentFolder, selectedFile, and currentIndex are what we expect.
+
+ It also checks that the relevant delegate in the view is current, has focus, and is highlighted.
+ As the FolderListModel (the view's model) is asynchronous, we need to wait for the currentIndex to change.
+
+ Can only be called when the dialog is open.
+*/
+#define VERIFY_FILE_SELECTED_AND_FOCUSED(expectedCurrentFolderUrl, expectedCurrentFileUrl, expectedCurrentIndex) \
+VERIFY_FILE_SELECTED(expectedCurrentFolderUrl, expectedCurrentFileUrl) \
+VERIFY_DELEGATE_CURRENT(expectedCurrentFileUrl, expectedCurrentIndex) \
+VERIFY_DELEGATE_FOCUSED(expectedCurrentIndex)
+
+class FileDialogTestHelper : public DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl>
{
- QQuickApplicationHelper helper(this, "fileDialog.qml");
- QVERIFY2(helper.ready, helper.failureMessage());
+public:
+ FileDialogTestHelper(QQmlDataTest *testCase, const QString &testFilePath,
+ const QStringList &qmlImportPaths = {}, const QVariantMap &initialProperties = {});
- QQuickWindow *window = helper.window;
- window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowExposed(window));
+ bool openDialog() override;
- QQuickFileDialog *dialog = window->property("dialog").value<QQuickFileDialog*>();
- QVERIFY(dialog);
- COMPARE_URL(dialog->selectedFile(), QUrl());
+ QPointer<QQuickListView> fileDialogListView;
+};
+
+FileDialogTestHelper::FileDialogTestHelper(QQmlDataTest *testCase, const QString &testFilePath,
+ const QStringList &qmlImportPaths, const QVariantMap &initialProperties)
+ : DialogTestHelper(testCase, testFilePath, qmlImportPaths, initialProperties)
+{
+}
+
+bool FileDialogTestHelper::openDialog()
+{
+ if (!DialogTestHelper::openDialog())
+ return false;
+
+ fileDialogListView = quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ return fileDialogListView != nullptr;
+}
+
+void tst_QQuickFileDialogImpl::defaults()
+{
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl());
// It should default to the current directory.
- COMPARE_URL(dialog->currentFolder(), QUrl::fromLocalFile(QDir().absolutePath()));
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(QDir().absolutePath()));
// The first file in the directory should be selected, but not until the dialog is actually open,
// as QQuickFileDialogImpl hasn't been created yet.
- COMPARE_URL(dialog->currentFile(), QUrl());
- COMPARE_URLS(dialog->currentFiles(), {});
- QCOMPARE(dialog->title(), QString());
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl());
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), {});
+ QCOMPARE(dialogHelper.dialog->title(), QString());
- dialog->open();
- QQuickFileDialogImpl *quickDialog = window->findChild<QQuickFileDialogImpl*>();
- QTRY_VERIFY(quickDialog->isOpened());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ QQuickFileDialogImpl *quickDialog = dialogHelper.window()->findChild<QQuickFileDialogImpl*>();
QVERIFY(quickDialog);
- COMPARE_URL(quickDialog->currentFolder(), QUrl::fromLocalFile(QDir().absolutePath()));
- COMPARE_URL(dialog->selectedFile(), QUrl::fromLocalFile(tempSubDir.path()));
- COMPARE_URLS(dialog->selectedFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
- COMPARE_URL(dialog->currentFile(), dialog->selectedFile());
- COMPARE_URLS(dialog->currentFiles(), dialog->selectedFiles());
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(QDir().absolutePath()), QUrl::fromLocalFile(tempSubDir.path()), 0);
QCOMPARE(quickDialog->title(), QString());
}
void tst_QQuickFileDialogImpl::chooseFileViaStandardButtons()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Select the delegate by clicking once.
QSignalSpy dialogSelectedFileChangedSpy(dialogHelper.dialog, SIGNAL(selectedFileChanged()));
@@ -236,16 +294,11 @@ void tst_QQuickFileDialogImpl::chooseFileViaStandardButtons()
QSignalSpy dialogCurrentFileChangedSpy(dialogHelper.dialog, SIGNAL(currentFileChanged()));
QVERIFY(dialogCurrentFileChangedSpy.isValid());
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 2, delegate));
COMPARE_URL(delegate->file(), QUrl::fromLocalFile(tempFile2->fileName()));
QVERIFY(clickButton(delegate));
- COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
- COMPARE_URL(dialogHelper.quickDialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
- COMPARE_URL(dialogHelper.dialog->currentFile(), dialogHelper.dialog->selectedFile());
- COMPARE_URLS(dialogHelper.dialog->currentFiles(), { dialogHelper.dialog->selectedFile() });
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempDir.path()), QUrl::fromLocalFile(tempFile2->fileName()), 2);
QCOMPARE(dialogSelectedFileChangedSpy.count(), 1);
QCOMPARE(dialogCurrentFileChangedSpy.count(), 1);
@@ -268,17 +321,12 @@ void tst_QQuickFileDialogImpl::chooseFileViaStandardButtons()
void tst_QQuickFileDialogImpl::chooseFileViaDoubleClick()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Select the delegate by double-clicking.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 2, delegate));
COMPARE_URL(delegate->file(), QUrl::fromLocalFile(tempFile2->fileName()))
QVERIFY(doubleClickButton(delegate));
COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile2->fileName()))
@@ -292,11 +340,8 @@ void tst_QQuickFileDialogImpl::chooseFileViaDoubleClick()
void tst_QQuickFileDialogImpl::chooseFileViaTextEdit()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Get the text edit visible with Ctrl+L.
const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
@@ -323,19 +368,14 @@ void tst_QQuickFileDialogImpl::chooseFileViaTextEdit()
void tst_QQuickFileDialogImpl::chooseFileViaEnter()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Before moving down, the first delegate in the view should be selected and have focus.
COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- QCOMPARE(fileDialogListView->currentIndex(), 0);
+ QCOMPARE(dialogHelper.fileDialogListView->currentIndex(), 0);
QQuickFileDialogDelegate *subDirDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 0, subDirDelegate));
COMPARE_URL(subDirDelegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
QVERIFY(subDirDelegate->hasActiveFocus());
@@ -378,21 +418,16 @@ void tst_QQuickFileDialogImpl::bindCurrentFolder()
QFETCH(QStringList, expectedVisibleFiles);
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ FileDialogTestHelper dialogHelper(this, "bindCurrentFolder.qml", {},
{{ "initialFolder", initialFolder }});
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
COMPARE_URL(dialogHelper.dialog->currentFolder(), expectedFolder);
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QString failureMessage;
// Even waiting for ListView polish and that the FolderListModel's status is ready aren't enough
// on Windows, apparently, as sometimes there just aren't any delegates by the time we do the check.
// So, we use QTRY_VERIFY2 each time we call this function just to be safe.
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
// Check that the breadcrumb bar is correct by constructing the expected files from the expectedFolder.
auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
@@ -403,25 +438,16 @@ void tst_QQuickFileDialogImpl::bindCurrentFolder()
void tst_QQuickFileDialogImpl::changeFolderViaStandardButtons()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Select the delegate by clicking once.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 0, delegate));
COMPARE_URL(delegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
QVERIFY(clickButton(delegate));
// The selectedFile should change, but not currentFolder.
- COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempSubDir.path()));
- COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
- COMPARE_URL(dialogHelper.dialog->currentFile(), dialogHelper.dialog->selectedFile());
- COMPARE_URLS(dialogHelper.dialog->currentFiles(), dialogHelper.dialog->selectedFiles());
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempDir.path()), QUrl::fromLocalFile(tempSubDir.path()), 0);
// Click the "Open" button. The dialog should navigate to that directory, but still be open.
QVERIFY(dialogHelper.quickDialog->footer());
@@ -454,30 +480,18 @@ void tst_QQuickFileDialogImpl::changeFolderViaDoubleClick()
qputenv("QT_QUICK_DIALOGS_SHOW_DIRS_FIRST", showDirsFirst ? "true" : "false");
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Select the "sub-dir" delegate by double-clicking.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *subDirDelegate = nullptr;
const int subDirIndex = showDirsFirst ? 0 : 2;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, subDirIndex, subDirDelegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, subDirIndex, subDirDelegate));
COMPARE_URL(subDirDelegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
QVERIFY(doubleClickButton(subDirDelegate));
// The first file in the directory should now be selected.
const QUrl firstFileUrl = showDirsFirst ? QUrl::fromLocalFile(tempSubSubDir.path()) : QUrl::fromLocalFile(tempSubFile1->fileName());
- COMPARE_URL(dialogHelper.dialog->selectedFile(), firstFileUrl);
- COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { firstFileUrl });
- COMPARE_URL(dialogHelper.dialog->currentFile(), dialogHelper.dialog->selectedFile());
- COMPARE_URLS(dialogHelper.dialog->currentFiles(), { dialogHelper.dialog->selectedFiles() });
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
- QQuickFileDialogDelegate *firstDelegateInSubDir = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, firstDelegateInSubDir));
- QCOMPARE(firstDelegateInSubDir->isHighlighted(), true);
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempSubDir.path()), firstFileUrl, 0);
// Since we only chose a folder, the dialog should still be open.
QVERIFY(dialogHelper.dialog->isVisible());
@@ -489,11 +503,8 @@ void tst_QQuickFileDialogImpl::changeFolderViaDoubleClick()
void tst_QQuickFileDialogImpl::chooseFolderViaTextEdit()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Get the text edit visible with Ctrl+L.
const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
@@ -511,16 +522,10 @@ void tst_QQuickFileDialogImpl::chooseFolderViaTextEdit()
// Hit enter to accept.
QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
// The first file in the directory should be selected, which is "sub-sub-dir".
- COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- QQuickFileDialogDelegate *subSubDirDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subSubDirDelegate));
- QCOMPARE(subSubDirDelegate->isHighlighted(), true);
- COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
- COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempSubSubDir.path()) });
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
- QTRY_VERIFY(dialogHelper.dialog->isVisible());
+ // Note that the TextEdit will still have focus, so we can't use VERIFY_FILE_SELECTED_AND_FOCUSED.
+ VERIFY_FILE_SELECTED(QUrl::fromLocalFile(tempSubDir.path()), QUrl::fromLocalFile(tempSubSubDir.path()));
+ VERIFY_DELEGATE_CURRENT(QUrl::fromLocalFile(tempSubSubDir.path()), 0)
+ QVERIFY(dialogHelper.dialog->isVisible());
dialogHelper.dialog->close();
QVERIFY(!dialogHelper.dialog->isVisible());
@@ -530,28 +535,16 @@ void tst_QQuickFileDialogImpl::chooseFolderViaTextEdit()
void tst_QQuickFileDialogImpl::chooseFolderViaEnter()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// The first delegate in the view should be selected and have focus.
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
- COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
- COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- QQuickFileDialogDelegate *subDirDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
- COMPARE_URL(subDirDelegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
- QVERIFY(subDirDelegate->hasActiveFocus());
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempDir.path()), QUrl::fromLocalFile(tempSubDir.path()), 0);
// Select the delegate by pressing enter.
QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
// The first file in the new directory should be selected, which is "sub-sub-dir".
- COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempSubDir.path()), QUrl::fromLocalFile(tempSubSubDir.path()), 0);
// Since we only chose a folder, the dialog should still be open.
QVERIFY(dialogHelper.dialog->isVisible());
@@ -563,11 +556,8 @@ void tst_QQuickFileDialogImpl::chooseFolderViaEnter()
void tst_QQuickFileDialogImpl::chooseFileAndThenFolderViaTextEdit()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Get the text edit visible with Ctrl+L.
const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
@@ -612,17 +602,9 @@ void tst_QQuickFileDialogImpl::chooseFileAndThenFolderViaTextEdit()
// Hit enter to accept.
QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
// The first file in the directory should be selected, which is "sub-sub-dir".
- COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- QQuickFileDialogDelegate *subSubDirDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subSubDirDelegate));
- QCOMPARE(subSubDirDelegate->isHighlighted(), true);
- // We just changed directories, so the actual selected file shouldn't change.
- COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
- COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempSubSubDir.path()) });
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
- QTRY_VERIFY(dialogHelper.dialog->isVisible());
+ // Note that the TextEdit will still have focus, so we can't use VERIFY_FILE_SELECTED_AND_FOCUSED.
+ VERIFY_FILE_SELECTED(QUrl::fromLocalFile(tempSubDir.path()), QUrl::fromLocalFile(tempSubSubDir.path()));
+ VERIFY_DELEGATE_CURRENT(QUrl::fromLocalFile(tempSubSubDir.path()), 0)
// Close the dialog.
dialogHelper.dialog->close();
@@ -633,11 +615,8 @@ void tst_QQuickFileDialogImpl::chooseFileAndThenFolderViaTextEdit()
void tst_QQuickFileDialogImpl::cancelDialogWhileTextEditHasFocus()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Get the text edit visible with Ctrl+L.
const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
@@ -667,12 +646,9 @@ void tst_QQuickFileDialogImpl::cancelDialogWhileTextEditHasFocus()
void tst_QQuickFileDialogImpl::goUp()
{
// Open the dialog. Start off in "sub-dir".
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ FileDialogTestHelper dialogHelper(this, "bindCurrentFolder.qml", {},
{{ "initialFolder", QUrl::fromLocalFile(tempSubDir.path()) }});
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
// Go up a directory via the button next to the breadcrumb bar.
auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
@@ -682,15 +658,8 @@ void tst_QQuickFileDialogImpl::goUp()
if (QQuickTest::qIsPolishScheduled(barListView))
QVERIFY(QQuickTest::qWaitForItemPolished(barListView));
QVERIFY(clickButton(breadcrumbBar->upButton()));
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
// The previous directory that we were in should now be selected (matches e.g. Windows and Ubuntu).
- COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
- COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- QQuickFileDialogDelegate *subDirDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
- QCOMPARE(subDirDelegate->isHighlighted(), true);
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempDir.path()), QUrl::fromLocalFile(tempSubDir.path()), 0);
// Go up a directory via the keyboard shortcut.
const auto goUpKeySequence = QKeySequence(Qt::ALT | Qt::Key_Up);
@@ -700,17 +669,16 @@ void tst_QQuickFileDialogImpl::goUp()
COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempParentDir.path()));
COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempDir.path()));
COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempDir.path()) });
+ // TODO: use the line below instead when QTBUG-103547 is fixed
+// VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempParentDir.path()), QUrl::fromLocalFile(tempDir.path()), 0);
}
void tst_QQuickFileDialogImpl::goUpWhileTextEditHasFocus()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ FileDialogTestHelper dialogHelper(this, "bindCurrentFolder.qml", {},
{{ "initialFolder", QUrl::fromLocalFile(tempSubDir.path()) }});
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
// Get the text edit visible with Ctrl+L.
const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
@@ -732,10 +700,8 @@ void tst_QQuickFileDialogImpl::goUpWhileTextEditHasFocus()
QVERIFY(!breadcrumbBar->textField()->isVisible());
// The focus should be given to the first delegate.
QVERIFY(dialogHelper.window()->activeFocusItem());
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *firstDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, firstDelegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 0, firstDelegate));
QCOMPARE(dialogHelper.window()->activeFocusItem(), firstDelegate);
}
@@ -761,50 +727,42 @@ void tst_QQuickFileDialogImpl::goIntoLargeFolder()
}
// Open the dialog. Start off in the throwaway directory.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ FileDialogTestHelper dialogHelper(this, "bindCurrentFolder.qml", {},
{{ "initialFolder", QUrl::fromLocalFile(anotherTempDir.path()) }});
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
// If the screen is so tall that the contentItem is not vertically larger than the view,
// then the test makes no sense.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- if (QQuickTest::qIsPolishScheduled(fileDialogListView))
- QVERIFY(QQuickTest::qWaitForItemPolished(fileDialogListView));
+ if (QQuickTest::qIsPolishScheduled(dialogHelper.fileDialogListView))
+ QVERIFY(QQuickTest::qWaitForItemPolished(dialogHelper.fileDialogListView));
// Just to be safe, make sure it's at least twice as big.
- if (fileDialogListView->contentItem()->height() < fileDialogListView->height() * 2) {
- QSKIP(qPrintable(QString::fromLatin1("Expected height of fileDialogListView's contentItem (%1)" \
+ if (dialogHelper.fileDialogListView->contentItem()->height() < dialogHelper.fileDialogListView->height() * 2) {
+ QSKIP(qPrintable(QString::fromLatin1("Expected height of dialogHelper.fileDialogListView's contentItem (%1)" \
" to be at least twice as big as the ListView's height (%2)")
- .arg(fileDialogListView->contentItem()->height()).arg(fileDialogListView->height())));
+ .arg(dialogHelper.fileDialogListView->contentItem()->height()).arg(dialogHelper.fileDialogListView->height())));
}
// Scroll down to dir20. The view should be somewhere past the middle.
- QVERIFY(QMetaObject::invokeMethod(fileDialogListView, "positionViewAtIndex", Qt::DirectConnection,
+ QVERIFY(QMetaObject::invokeMethod(dialogHelper.fileDialogListView, "positionViewAtIndex", Qt::DirectConnection,
Q_ARG(int, 20), Q_ARG(int, QQuickItemView::PositionMode::Center)));
- QVERIFY(fileDialogListView->contentY() > 0);
+ QVERIFY(dialogHelper.fileDialogListView->contentY() > 0);
// Go into it. The view should start at the top of the directory, not at the same contentY
// that it had in the previous directory.
QQuickFileDialogDelegate *dir20Delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 20, dir20Delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 20, dir20Delegate));
COMPARE_URL(dir20Delegate->file(), QUrl::fromLocalFile(dir20.path()));
QVERIFY(doubleClickButton(dir20Delegate));
COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(dir20.path()));
COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(dir20.path()));
- QCOMPARE(fileDialogListView->contentY(), 0);
+ QCOMPARE(dialogHelper.fileDialogListView->contentY(), 0);
}
void tst_QQuickFileDialogImpl::keyAndShortcutHandling()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
// Get the text edit visible with Ctrl+L.
const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
@@ -842,23 +800,18 @@ void tst_QQuickFileDialogImpl::keyAndShortcutHandling()
void tst_QQuickFileDialogImpl::bindNameFilters()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindTxtHtmlNameFilters.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "bindTxtHtmlNameFilters.qml");
+ OPEN_QUICK_DIALOG();
// Only "sub-dir", "text1.txt" and "text2.txt" should be visible, since *.txt is the first filter.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QString failureMessage;
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView,
{ tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
}
void tst_QQuickFileDialogImpl::changeNameFilters()
{
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
QVERIFY(dialogHelper.waitForWindowActive());
@@ -902,10 +855,8 @@ void tst_QQuickFileDialogImpl::changeNameFilters()
QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->globs(), { "*.txt" });
// Only "sub-dir", "text1.txt" and "text2.txt" should be visible, since *.txt is the first filter.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QString failureMessage;
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView,
{ tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
// Open the ComboBox's popup.
@@ -926,7 +877,7 @@ void tst_QQuickFileDialogImpl::changeNameFilters()
QTRY_VERIFY(!comboBox->popup()->isVisible());
// Use QTRY_VERIFY2 here to fix a failure on QEMU armv7 (QT_QPA_PLATFORM=offscreen).
// Not sure why it's necessary.
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, { tempSubDir.path() }, failureMessage), qPrintable(failureMessage));
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView, { tempSubDir.path() }, failureMessage), qPrintable(failureMessage));
// Open the popup again.
QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, comboBoxCenterPos);
@@ -940,27 +891,22 @@ void tst_QQuickFileDialogImpl::changeNameFilters()
QVERIFY(clickButton(txtDelegate));
}
QTRY_VERIFY(!comboBox->popup()->isVisible());
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView,
{ tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
}
void tst_QQuickFileDialogImpl::changeNameFiltersAfterChangingFolder()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindAllTxtHtmlNameFilters.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "bindAllTxtHtmlNameFilters.qml");
+ OPEN_QUICK_DIALOG();
// Go into the "sub-dir" folder.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QString failureMessage;
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView,
{ tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
QQuickFileDialogDelegate *subDirDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 0, subDirDelegate));
QVERIFY(doubleClickButton(subDirDelegate));
COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
@@ -982,25 +928,20 @@ void tst_QQuickFileDialogImpl::changeNameFiltersAfterChangingFolder()
}
QTRY_VERIFY(!comboBox->popup()->isVisible());
// There are no HTML files in "sub-dir", so there should only be the one "sub-sub-dir" delegate.
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, { tempSubSubDir.path() }, failureMessage), qPrintable(failureMessage));
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView, { tempSubSubDir.path() }, failureMessage), qPrintable(failureMessage));
}
void tst_QQuickFileDialogImpl::tabFocusNavigation()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindTxtHtmlNameFilters.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "bindTxtHtmlNameFilters.qml");
+ OPEN_QUICK_DIALOG();
QList<QQuickItem*> expectedFocusItems;
// The initial focus should be on the first delegate.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *firstDelegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, firstDelegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 0, firstDelegate));
expectedFocusItems << firstDelegate;
// Tab should move to the name filters combobox.
@@ -1027,9 +968,9 @@ void tst_QQuickFileDialogImpl::tabFocusNavigation()
expectedFocusItems << breadcrumbBar->upButton();
// Finally, add each bread crumb delegate.
- for (int i = 0; i < fileDialogListView->count(); ++i) {
+ for (int i = 0; i < dialogHelper.fileDialogListView->count(); ++i) {
QQuickFileDialogDelegate *delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, i, delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, i, delegate));
expectedFocusItems << delegate;
}
@@ -1059,11 +1000,8 @@ void tst_QQuickFileDialogImpl::tabFocusNavigation()
void tst_QQuickFileDialogImpl::acceptRejectLabel()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "acceptRejectLabel.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "acceptRejectLabel.qml");
+ OPEN_QUICK_DIALOG();
// Check that the accept and reject buttons' labels have changed.
auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
@@ -1097,11 +1035,8 @@ void tst_QQuickFileDialogImpl::acceptRejectLabel()
void tst_QQuickFileDialogImpl::bindTitle()
{
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindTitle.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "bindTitle.qml");
+ OPEN_QUICK_DIALOG();
// Open the dialog and check that the correct title is displayed.
QQuickFileDialog *dialog = dialogHelper.window()->property("dialog").value<QQuickFileDialog*>();
@@ -1125,12 +1060,9 @@ void tst_QQuickFileDialogImpl::itemsDisabledWhenNecessary()
QVERIFY(subDir.cd("emptyDir"));
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ FileDialogTestHelper dialogHelper(this, "bindCurrentFolder.qml", {},
{{ "initialFolder", QUrl::fromLocalFile(subDir.path()) }});
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(subDir.path()));
COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(subDir.path()));
@@ -1176,18 +1108,13 @@ void tst_QQuickFileDialogImpl::fileMode()
QFETCH(QQuickFileDialog::FileMode, fileMode);
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
dialogHelper.dialog->setFileMode(fileMode);
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
// Select the first file (not a directory).
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QQuickFileDialogDelegate *tempFile1Delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 1, tempFile1Delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 1, tempFile1Delegate));
COMPARE_URL(tempFile1Delegate->file(), QUrl::fromLocalFile(tempFile1->fileName()));
QVERIFY(clickButton(tempFile1Delegate));
COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile1->fileName()));
@@ -1203,7 +1130,7 @@ void tst_QQuickFileDialogImpl::fileMode()
// Only the OpenFiles mode should allow multiple files to be selected, however.
QQuickFileDialogDelegate *tempFile2Delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, tempFile2Delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 2, tempFile2Delegate));
COMPARE_URL(tempFile2Delegate->file(), QUrl::fromLocalFile(tempFile2->fileName()));
QTest::keyPress(dialogHelper.window(), Qt::Key_Shift);
QVERIFY(clickButton(tempFile2Delegate));
@@ -1275,25 +1202,20 @@ void tst_QQuickFileDialogImpl::defaultSuffix()
QVERIFY(tempFile1.open(QIODevice::ReadWrite));
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ FileDialogTestHelper dialogHelper(this, "bindCurrentFolder.qml", {},
{{ "initialFolder", QUrl::fromLocalFile(tempSubSubDir.path()) }});
dialogHelper.dialog->setDefaultSuffix(defaultSuffix);
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubSubDir.path()));
// There should be one extension-less file: "file1".
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
QString failureMessage;
const QStringList expectedVisibleFiles = { tempFile1.fileName() };
- QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
+ QTRY_VERIFY2(verifyFileDialogDelegates(dialogHelper.fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
// Choose the delegate. The suffix should be added to the delegates.
QQuickFileDialogDelegate *file1Delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, file1Delegate));
+ QTRY_VERIFY(findViewDelegateItem(dialogHelper.fileDialogListView, 0, file1Delegate));
COMPARE_URL(file1Delegate->file(), QUrl::fromLocalFile(tempFile1.fileName()));
QVERIFY(doubleClickButton(file1Delegate));
QVERIFY(!dialogHelper.dialog->isVisible());
@@ -1316,11 +1238,8 @@ void tst_QQuickFileDialogImpl::done()
QFETCH(QQuickFileDialog::StandardCode, result);
// Open the dialog.
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ FileDialogTestHelper dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
switch (result) {
case QQuickFileDialog::Accepted:
@@ -1346,36 +1265,22 @@ void tst_QQuickFileDialogImpl::setSelectedFile()
QFETCH(QQuickFileDialog::FileMode, fileMode);
// Open the dialog.
+ const auto tempFile1Url = QUrl::fromLocalFile(tempFile1->fileName());
const QVariantMap initialProperties = {
- { "tempFile1Url", QVariant::fromValue(QUrl::fromLocalFile(tempFile1->fileName())) },
+ { "tempFile1Url", QVariant::fromValue(tempFile1Url) },
{ "fileMode", QVariant::fromValue(fileMode) }
};
- DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(
+ FileDialogTestHelper dialogHelper(
this, "setSelectedFile.qml", {}, initialProperties);
- QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
- QVERIFY(dialogHelper.waitForWindowActive());
- QVERIFY(dialogHelper.openDialog());
- QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ OPEN_QUICK_DIALOG();
// The selected file should be what we set.
- const auto tempFile1Url = QUrl::fromLocalFile(tempFile1->fileName());
- COMPARE_URL(dialogHelper.dialog->selectedFile(), tempFile1Url);
- COMPARE_URL(dialogHelper.quickDialog->selectedFile(), tempFile1Url);
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
- COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
- // Check that the relevant delegate in the view is current and has focus.
- auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
- QVERIFY(fileDialogListView);
- QQuickFileDialogDelegate *tempFile1Delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 1, tempFile1Delegate));
- COMPARE_URL(tempFile1Delegate->file(), tempFile1Url);
- QCOMPARE(fileDialogListView->currentIndex(), 1);
- QVERIFY(tempFile1Delegate->hasActiveFocus());
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempDir.path()), tempFile1Url, 1);
// Next, we select a different file via the UI, close the dialog, set selectedFile again and check that it's still respected.
// Select the first file in the view by navigating with the down key.
- QCOMPARE(dialogHelper.window()->activeFocusItem(), tempFile1Delegate);
+ // We know it already has focus, as VERIFY_FILE_SELECTED_AND_FOCUSED checks that.
QTest::keyClick(dialogHelper.window(), Qt::Key_Down);
const auto tempFile2Url = QUrl::fromLocalFile(tempFile2->fileName());
COMPARE_URL(dialogHelper.quickDialog->selectedFile(), tempFile2Url);
@@ -1393,17 +1298,7 @@ void tst_QQuickFileDialogImpl::setSelectedFile()
dialogHelper.dialog->setSelectedFile(QUrl::fromLocalFile(tempFile2->fileName()));
QVERIFY(dialogHelper.openDialog());
QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
- // TODO: move this duplicated code into a helper
- COMPARE_URL(dialogHelper.dialog->selectedFile(), tempFile2Url);
- COMPARE_URL(dialogHelper.quickDialog->selectedFile(), tempFile2Url);
- COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
- COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
- // Check that the relevant delegate in the view is current and has focus.
- QQuickFileDialogDelegate *tempFile2Delegate = nullptr;
- QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, tempFile2Delegate));
- COMPARE_URL(tempFile2Delegate->file(), tempFile2Url);
- QCOMPARE(fileDialogListView->currentIndex(), 2);
- QVERIFY(tempFile2Delegate->hasActiveFocus());
+ VERIFY_FILE_SELECTED_AND_FOCUSED(QUrl::fromLocalFile(tempDir.path()), tempFile2Url, 2);
}
QTEST_MAIN(tst_QQuickFileDialogImpl)