From 3720c5ef7900539abb76c7d3925b142d4894c09f Mon Sep 17 00:00:00 2001 From: frostasm Date: Fri, 22 Dec 2017 20:05:33 +0200 Subject: [PATCH] Add test for drag and drop database files into main window --- src/gui/MainWindow.cpp | 3 +++ tests/gui/TestGui.cpp | 37 +++++++++++++++++++++++++++++++++++++ tests/gui/TestGui.h | 1 + 3 files changed, 41 insertions(+) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 718eb1c61..72be3a4aa 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1035,6 +1035,9 @@ void MainWindow::dropEvent(QDropEvent* event) const QMimeData* mimeData = event->mimeData(); if (mimeData->hasUrls()) { const QStringList kdbxFiles = kdbxFilesFromUrls(mimeData->urls()); + if (!kdbxFiles.isEmpty()) { + event->acceptProposedAction(); + } for (const QString& kdbxFile: kdbxFiles) { openDatabase(kdbxFile); } diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 664bfd654..17b2736cc 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -952,6 +952,43 @@ void TestGui::testDatabaseLocking() QCOMPARE(m_tabWidget->tabText(0).remove('&'), origDbName); } +void TestGui::testDragAndDropKdbxFiles() +{ + const int openedDatabasesCount = m_tabWidget->count(); + + const QString badDatabaseFilePath(QString(KEEPASSX_TEST_DATA_DIR).append("/NotDatabase.notkdbx")); + QMimeData badMimeData; + badMimeData.setUrls({QUrl::fromLocalFile(badDatabaseFilePath)}); + QDragEnterEvent badDragEvent(QPoint(1, 1), Qt::LinkAction, &badMimeData, Qt::LeftButton, Qt::NoModifier); + qApp->notify(m_mainWindow, &badDragEvent); + QCOMPARE(badDragEvent.isAccepted(), false); + + QDropEvent badDropEvent(QPoint(1, 1), Qt::LinkAction, &badMimeData, Qt::LeftButton, Qt::NoModifier); + qApp->notify(m_mainWindow, &badDropEvent); + QCOMPARE(badDropEvent.isAccepted(), false); + + QCOMPARE(m_tabWidget->count(), openedDatabasesCount); + + const QString goodDatabaseFilePath(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx")); + QMimeData goodMimeData; + goodMimeData.setUrls({QUrl::fromLocalFile(goodDatabaseFilePath)}); + QDragEnterEvent goodDragEvent(QPoint(1, 1), Qt::LinkAction, &goodMimeData, Qt::LeftButton, Qt::NoModifier); + qApp->notify(m_mainWindow, &goodDragEvent); + QCOMPARE(goodDragEvent.isAccepted(), true); + + QDropEvent goodDropEvent(QPoint(1, 1), Qt::LinkAction, &goodMimeData, Qt::LeftButton, Qt::NoModifier); + qApp->notify(m_mainWindow, &goodDropEvent); + QCOMPARE(goodDropEvent.isAccepted(), true); + + QCOMPARE(m_tabWidget->count(), openedDatabasesCount + 1); + + MessageBox::setNextAnswer(QMessageBox::No); + triggerAction("actionDatabaseClose"); + Tools::wait(100); + + QCOMPARE(m_tabWidget->count(), openedDatabasesCount); +} + void TestGui::cleanupTestCase() { delete m_mainWindow; diff --git a/tests/gui/TestGui.h b/tests/gui/TestGui.h index 5ec8237b3..1a2b24e74 100644 --- a/tests/gui/TestGui.h +++ b/tests/gui/TestGui.h @@ -60,6 +60,7 @@ private slots: void testDatabaseSettings(); void testKeePass1Import(); void testDatabaseLocking(); + void testDragAndDropKdbxFiles(); private: int addCannedEntries();