┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dolphinmainwindow.cpp12
-rw-r--r--src/tests/dolphinmainwindowtest.cpp29
-rw-r--r--src/tests/placesitemmodeltest.cpp176
3 files changed, 166 insertions, 51 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 8c76fe780..7f36e82db 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -455,10 +455,6 @@ void DolphinMainWindow::updateNewMenu()
m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->hiddenFilesShown());
m_newFileMenu->checkUpToDate();
m_newFileMenu->setPopupFiles(activeViewContainer()->url());
-
- // If we're in the trash, also disable all the 'create new' items
- // TODO: remove this once https://phabricator.kde.org/T8234 is implemented
- slotWriteStateChanged(m_activeViewContainer->view()->url().scheme() != QLatin1String("trash"));
}
void DolphinMainWindow::createDirectory()
@@ -807,10 +803,9 @@ void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job)
void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable)
{
- const auto actions = m_newFileMenu->menu()->actions();
- for (auto menuItem : actions) {
- menuItem->setEnabled(isFolderWritable);
- }
+ // trash:/ is writable but we don't want to create new items in it.
+ // TODO: remove the trash check once https://phabricator.kde.org/T8234 is implemented
+ newFileMenu()->setEnabled(isFolderWritable && m_activeViewContainer->url().scheme() != QLatin1String("trash"));
}
void DolphinMainWindow::openContextMenu(const QPoint& pos,
@@ -1028,6 +1023,7 @@ void DolphinMainWindow::setupActions()
{
// setup 'File' menu
m_newFileMenu = new DolphinNewFileMenu(actionCollection(), this);
+ m_newFileMenu->setObjectName("newFileMenu");
QMenu* menu = m_newFileMenu->menu();
menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new")));
diff --git a/src/tests/dolphinmainwindowtest.cpp b/src/tests/dolphinmainwindowtest.cpp
index ca492215a..027ab3e89 100644
--- a/src/tests/dolphinmainwindowtest.cpp
+++ b/src/tests/dolphinmainwindowtest.cpp
@@ -18,6 +18,7 @@
***************************************************************************/
#include "dolphinmainwindow.h"
+#include "dolphinnewfilemenu.h"
#include "dolphintabpage.h"
#include "dolphintabwidget.h"
#include "dolphinviewcontainer.h"
@@ -40,6 +41,9 @@ private slots:
void testActiveViewAfterClosingSplitView();
void testUpdateWindowTitleAfterClosingSplitView();
void testOpenInNewTabTitle();
+ void testNewFileMenuEnabled_data();
+ void testNewFileMenuEnabled();
+
private:
QScopedPointer<DolphinMainWindow> m_mainWindow;
@@ -188,6 +192,31 @@ void DolphinMainWindowTest::testOpenInNewTabTitle()
QVERIFY(tabWidget->tabText(0) != tabWidget->tabText(1));
}
+void DolphinMainWindowTest::testNewFileMenuEnabled_data()
+{
+ QTest::addColumn<QUrl>("activeViewUrl");
+ QTest::addColumn<bool>("expectedEnabled");
+
+ QTest::newRow("home") << QUrl::fromLocalFile(QDir::homePath()) << true;
+ QTest::newRow("root") << QUrl::fromLocalFile(QDir::rootPath()) << false;
+ QTest::newRow("trash") << QUrl::fromUserInput(QStringLiteral("trash:/")) << false;
+}
+
+void DolphinMainWindowTest::testNewFileMenuEnabled()
+{
+ QFETCH(QUrl, activeViewUrl);
+ m_mainWindow->openDirectories({ activeViewUrl }, false);
+ m_mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
+ QVERIFY(m_mainWindow->isVisible());
+
+ auto newFileMenu = m_mainWindow->findChild<DolphinNewFileMenu*>("newFileMenu");
+ QVERIFY(newFileMenu);
+
+ QFETCH(bool, expectedEnabled);
+ QCOMPARE(newFileMenu->isEnabled(), expectedEnabled);
+}
+
QTEST_MAIN(DolphinMainWindowTest)
#include "dolphinmainwindowtest.moc"
diff --git a/src/tests/placesitemmodeltest.cpp b/src/tests/placesitemmodeltest.cpp
index 2e814220a..545bba89c 100644
--- a/src/tests/placesitemmodeltest.cpp
+++ b/src/tests/placesitemmodeltest.cpp
@@ -85,6 +85,9 @@ private:
PlacesItemModel* m_model;
QSet<int> m_tobeRemoved;
QMap<QString, QDBusInterface *> m_interfacesMap;
+ int m_expectedModelCount = 15;
+ bool m_hasDesktopFolder = false;
+ bool m_hasDownloadsFolder = false;
void setBalooEnabled(bool enabled);
int indexOf(const QUrl &url);
@@ -161,10 +164,17 @@ QStringList PlacesItemModelTest::initialUrls() const
{
static QStringList urls;
if (urls.isEmpty()) {
- urls << QDir::homePath()
- << QDir::homePath() + QStringLiteral("/Desktop")
- << QDir::homePath() + QStringLiteral("/Downloads")
- << QStringLiteral(KDE_ROOT_PATH) << QStringLiteral("trash:/")
+ urls << QDir::homePath();
+
+ if (m_hasDesktopFolder) {
+ urls << QDir::homePath() + QStringLiteral("/Desktop");
+ }
+
+ if (m_hasDownloadsFolder) {
+ urls << QDir::homePath() + QStringLiteral("/Downloads");
+ }
+
+ urls << QStringLiteral(KDE_ROOT_PATH) << QStringLiteral("trash:/")
<< QStringLiteral("remote:/")
<< QStringLiteral("/media/nfs")
<< QStringLiteral("timeline:/today") << QStringLiteral("timeline:/yesterday")
@@ -227,7 +237,7 @@ void PlacesItemModelTest::init()
m_model = new PlacesItemModel();
// WORKAROUND: need to wait for bookmark to load, check: PlacesItemModel::updateBookmarks
QTest::qWait(300);
- QCOMPARE(m_model->count(), 17);
+ QCOMPARE(m_model->count(), m_expectedModelCount);
}
void PlacesItemModelTest::cleanup()
@@ -261,6 +271,16 @@ void PlacesItemModelTest::initTestCase()
QVERIFY(QFile::remove(bookmarsFileName));
}
+ if (QDir(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)).exists()) {
+ m_hasDesktopFolder = true;
+ m_expectedModelCount++;
+ }
+
+ if (QDir(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)).exists()) {
+ m_hasDownloadsFolder = true;
+ m_expectedModelCount++;
+ }
+
qRegisterMetaType<KItemRangeList>();
qRegisterMetaType<KItemRange>();
}
@@ -282,26 +302,32 @@ void PlacesItemModelTest::testModelSort()
void PlacesItemModelTest::testGroups()
{
const auto groups = m_model->groups();
-
+ int expectedGroupSize = 3;
+ if (m_hasDesktopFolder) {
+ expectedGroupSize++;
+ }
+ if (m_hasDownloadsFolder) {
+ expectedGroupSize++;
+ }
QCOMPARE(groups.size(), 6);
QCOMPARE(groups.at(0).first, 0);
QCOMPARE(groups.at(0).second.toString(), QStringLiteral("Places"));
- QCOMPARE(groups.at(1).first, 5);
+ QCOMPARE(groups.at(1).first, expectedGroupSize);
QCOMPARE(groups.at(1).second.toString(), QStringLiteral("Remote"));
- QCOMPARE(groups.at(2).first, 7);
+ QCOMPARE(groups.at(2).first, expectedGroupSize + 2);
QCOMPARE(groups.at(2).second.toString(), QStringLiteral("Recently Saved"));
- QCOMPARE(groups.at(3).first, 9);
+ QCOMPARE(groups.at(3).first, expectedGroupSize + 4);
QCOMPARE(groups.at(3).second.toString(), QStringLiteral("Search For"));
- QCOMPARE(groups.at(4).first, 13);
+ QCOMPARE(groups.at(4).first, expectedGroupSize + 8);
QCOMPARE(groups.at(4).second.toString(), QStringLiteral("Devices"));
- QCOMPARE(groups.at(5).first, 14);
+ QCOMPARE(groups.at(5).first, expectedGroupSize + 9);
QCOMPARE(groups.at(5).second.toString(), QStringLiteral("Removable Devices"));
}
@@ -352,9 +378,17 @@ void PlacesItemModelTest::testDeletePlace()
PlacesItemModel *model = new PlacesItemModel();
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
// create a new place
createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString());
- urls.insert(5, tempUrl.toLocalFile());
+ urls.insert(tempDirIndex, tempUrl.toLocalFile());
// check if the new entry was created
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
@@ -362,11 +396,11 @@ void PlacesItemModelTest::testDeletePlace()
QTRY_COMPARE(model->count(), m_model->count());
// delete item
- m_model->deleteItem(5);
+ m_model->deleteItem(tempDirIndex);
// make sure that the new item is removed
QTRY_COMPARE(itemsRemovedSpy.count(), 1);
- QTRY_COMPARE(m_model->count(), 17);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount);
CHECK_PLACES_URLS(initialUrls());
QTRY_COMPARE(model->count(), m_model->count());
}
@@ -383,11 +417,11 @@ void PlacesItemModelTest::testTearDownDevice()
auto teardownAction = m_model->teardownAction(index);
QVERIFY(teardownAction);
- QCOMPARE(m_model->count(), 17);
+ QCOMPARE(m_model->count(), m_expectedModelCount);
QSignalSpy spyItemsRemoved(m_model, &PlacesItemModel::itemsRemoved);
fakeManager()->call(QStringLiteral("unplug"), "/org/kde/solid/fakehw/volume_part1_size_993284096");
- QTRY_COMPARE(m_model->count(), 16);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount - 1);
QCOMPARE(spyItemsRemoved.count(), 1);
const QList<QVariant> spyItemsRemovedArgs = spyItemsRemoved.takeFirst();
const KItemRangeList removedRange = spyItemsRemovedArgs.at(0).value<KItemRangeList>();
@@ -399,7 +433,7 @@ void PlacesItemModelTest::testTearDownDevice()
QSignalSpy spyItemsInserted(m_model, &PlacesItemModel::itemsInserted);
fakeManager()->call(QStringLiteral("plug"), "/org/kde/solid/fakehw/volume_part1_size_993284096");
- QTRY_COMPARE(m_model->count(), 17);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount);
QCOMPARE(spyItemsInserted.count(), 1);
index = indexOf(mediaUrl);
@@ -449,12 +483,12 @@ void PlacesItemModelTest::testDefaultViewProperties()
void PlacesItemModelTest::testClear()
{
- QCOMPARE(m_model->count(), 17);
+ QCOMPARE(m_model->count(), m_expectedModelCount);
m_model->clear();
QCOMPARE(m_model->count(), 0);
QCOMPARE(m_model->hiddenCount(), 0);
m_model->refresh();
- QTRY_COMPARE(m_model->count(), 17);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount);
}
void PlacesItemModelTest::testHideItem()
@@ -477,7 +511,7 @@ void PlacesItemModelTest::testHideItem()
item->setHidden(true);
// check if items removed was fired
- QTRY_COMPARE(m_model->count(), 16);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount - 1);
QCOMPARE(spyItemsRemoved.count(), 1);
spyItemsRemovedArgs = spyItemsRemoved.takeFirst();
removedRange = spyItemsRemovedArgs.at(0).value<KItemRangeList>();
@@ -502,12 +536,20 @@ void PlacesItemModelTest::testHideItem()
// mark model to hide invisible items
m_model->setHiddenItemsShown(true);
- QTRY_COMPARE(m_model->count(), 17);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount);
}
void PlacesItemModelTest::testSystemItems()
{
- QCOMPARE(m_model->count(), 17);
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
+ QCOMPARE(m_model->count(), m_expectedModelCount);
for (int r = 0; r < m_model->count(); r++) {
QCOMPARE(m_model->placesItem(r)->isSystemItem(), !m_model->placesItem(r)->device().isValid());
}
@@ -521,38 +563,46 @@ void PlacesItemModelTest::testSystemItems()
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
// make sure the new place get removed
- removePlaceAfter(5);
+ removePlaceAfter(tempDirIndex);
QList<QVariant> args = itemsInsertedSpy.takeFirst();
KItemRangeList range = args.at(0).value<KItemRangeList>();
- QCOMPARE(range.first().index, 5);
+ QCOMPARE(range.first().index, tempDirIndex);
QCOMPARE(range.first().count, 1);
- QVERIFY(!m_model->placesItem(5)->isSystemItem());
- QCOMPARE(m_model->count(), 18);
+ QVERIFY(!m_model->placesItem(tempDirIndex)->isSystemItem());
+ QCOMPARE(m_model->count(), m_expectedModelCount + 1);
QTest::qWait(300);
// check if the removal signal is correct
QSignalSpy itemsRemovedSpy(m_model, &PlacesItemModel::itemsRemoved);
- m_model->deleteItem(5);
+ m_model->deleteItem(tempDirIndex);
QTRY_COMPARE(itemsRemovedSpy.count(), 1);
args = itemsRemovedSpy.takeFirst();
range = args.at(0).value<KItemRangeList>();
- QCOMPARE(range.first().index, 5);
+ QCOMPARE(range.first().index, tempDirIndex);
QCOMPARE(range.first().count, 1);
- QTRY_COMPARE(m_model->count(), 17);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount);
//cancel removal (it was removed above)
- cancelPlaceRemoval(5);
+ cancelPlaceRemoval(tempDirIndex);
}
void PlacesItemModelTest::testEditBookmark()
{
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
QScopedPointer<PlacesItemModel> other(new PlacesItemModel());
createPlaceItem(QStringLiteral("Temporary Dir"), QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)), QString());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ removePlaceAfter(tempDirIndex);
QSignalSpy itemsChangedSply(m_model, &PlacesItemModel::itemsChanged);
@@ -577,6 +627,14 @@ void PlacesItemModelTest::testEditBookmark()
void PlacesItemModelTest::testEditAfterCreation()
{
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
@@ -588,7 +646,7 @@ void PlacesItemModelTest::testEditAfterCreation()
QTRY_COMPARE(model->count(), m_model->count());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ removePlaceAfter(tempDirIndex);
// modify place text
PlacesItem *item = m_model->placesItem(3);
@@ -606,6 +664,14 @@ void PlacesItemModelTest::testEditAfterCreation()
void PlacesItemModelTest::testEditMetadata()
{
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
@@ -618,7 +684,7 @@ void PlacesItemModelTest::testEditMetadata()
QTRY_COMPARE(model->count(), m_model->count());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ removePlaceAfter(tempDirIndex);
// modify place metadata
PlacesItem *item = m_model->placesItem(3);
@@ -637,6 +703,14 @@ void PlacesItemModelTest::testEditMetadata()
void PlacesItemModelTest::testRefresh()
{
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
@@ -648,10 +722,10 @@ void PlacesItemModelTest::testRefresh()
QTRY_COMPARE(model->count(), m_model->count());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ removePlaceAfter(tempDirIndex);
- PlacesItem *item = m_model->placesItem(5);
- PlacesItem *sameItem = model->placesItem(5);
+ PlacesItem *item = m_model->placesItem(tempDirIndex);
+ PlacesItem *sameItem = model->placesItem(tempDirIndex);
QCOMPARE(item->text(), sameItem->text());
// modify place text
@@ -700,6 +774,14 @@ void PlacesItemModelTest::testIcons()
void PlacesItemModelTest::testDragAndDrop()
{
+ int lastIndex = 2; // last index of places group
+ if (m_hasDesktopFolder) {
+ lastIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ lastIndex++;
+ }
+
QList<QVariant> args;
KItemRangeList range;
QStringList urls = initialUrls();
@@ -710,7 +792,7 @@ void PlacesItemModelTest::testDragAndDrop()
// Move the home directory to the end of the places group
QMimeData *dropData = createMimeData(QList<int>() << 0);
m_model->dropMimeDataBefore(m_model->count() - 1, dropData);
- urls.move(0, 4);
+ urls.move(0, lastIndex);
delete dropData;
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
@@ -728,7 +810,7 @@ void PlacesItemModelTest::testDragAndDrop()
range = args.at(0).value<KItemRangeList>();
QCOMPARE(range.size(), 1);
QCOMPARE(range.at(0).count, 1);
- QCOMPARE(range.at(0).index, 4);
+ QCOMPARE(range.at(0).index, lastIndex);
CHECK_PLACES_URLS(urls);
@@ -736,9 +818,9 @@ void PlacesItemModelTest::testDragAndDrop()
itemsRemovedSpy.clear();
// Move home directory item back to its original position
- dropData = createMimeData(QList<int>() << 4);
+ dropData = createMimeData(QList<int>() << lastIndex);
m_model->dropMimeDataBefore(0, dropData);
- urls.move(4, 0);
+ urls.move(lastIndex, 0);
delete dropData;
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
@@ -749,7 +831,7 @@ void PlacesItemModelTest::testDragAndDrop()
range = args.at(0).value<KItemRangeList>();
QCOMPARE(range.size(), 1);
QCOMPARE(range.at(0).count, 1);
- QCOMPARE(range.at(0).index, 4);
+ QCOMPARE(range.at(0).index, lastIndex);
// insert intem in the requested position
args = itemsInsertedSpy.takeFirst();
@@ -811,6 +893,14 @@ void PlacesItemModelTest::testDuplicatedEntries()
void PlacesItemModelTest::renameAfterCreation()
{
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QStringList urls = initialUrls();
PlacesItemModel *model = new PlacesItemModel();
@@ -820,10 +910,10 @@ void PlacesItemModelTest::renameAfterCreation()
// create a new place
createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString());
- urls.insert(5, tempUrl.toLocalFile());
+ urls.insert(tempDirIndex, tempUrl.toLocalFile());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ removePlaceAfter(tempDirIndex);
CHECK_PLACES_URLS(urls);
QCOMPARE(model->count(), m_model->count());