X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4c40ad45efe5de561323e8fa6df2ab59d8f10988..3abc4cfcd49df45c856e1b5f01da8de8f970ccb2:/src/tests/placesitemmodeltest.cpp diff --git a/src/tests/placesitemmodeltest.cpp b/src/tests/placesitemmodeltest.cpp index 5b6e763d0..15a494691 100644 --- a/src/tests/placesitemmodeltest.cpp +++ b/src/tests/placesitemmodeltest.cpp @@ -1,21 +1,8 @@ -/*************************************************************************** - * Copyright (C) 2017 by Renato Araujo Oliveira * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2017 Renato Araujo Oliveira + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include #include @@ -28,7 +15,9 @@ #include #include #include +#include +#include "dolphin_generalsettings.h" #include "panels/places/placesitemmodel.h" #include "panels/places/placesitem.h" #include "views/viewproperties.h" @@ -36,13 +25,6 @@ Q_DECLARE_METATYPE(KItemRangeList) Q_DECLARE_METATYPE(KItemRange) -#ifdef Q_OS_WIN -//c:\ as root for windows -#define KDE_ROOT_PATH "C:\\" -#else -#define KDE_ROOT_PATH "/" -#endif - static QString bookmarksFile() { return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/user-places.xbel"; @@ -52,7 +34,7 @@ class PlacesItemModelTest : public QObject { Q_OBJECT -private slots: +private Q_SLOTS: void init(); void cleanup(); @@ -85,9 +67,13 @@ private: PlacesItemModel* m_model; QSet m_tobeRemoved; QMap m_interfacesMap; - int m_expectedModelCount = 15; + int m_expectedModelCount = 14; bool m_hasDesktopFolder = false; + bool m_hasDocumentsFolder = false; bool m_hasDownloadsFolder = false; + bool m_hasMusicFolder = false; + bool m_hasPicturesFolder = false; + bool m_hasVideosFolder = false; void setBalooEnabled(bool enabled); int indexOf(const QUrl &url); @@ -96,10 +82,11 @@ private: QStringList placesUrls(PlacesItemModel *model = nullptr) const; QStringList initialUrls() const; void createPlaceItem(const QString &text, const QUrl &url, const QString &icon); - void removePlaceAfter(int index); + void schedulePlaceRemoval(int index); void cancelPlaceRemoval(int index); - void removeTestUserData(); QMimeData *createMimeData(const QList &indexes) const; + void increaseIndexIfNeeded(int &index) const; + QTemporaryDir m_tempHomeDir; }; #define CHECK_PLACES_URLS(urls) \ @@ -170,15 +157,39 @@ QStringList PlacesItemModelTest::initialUrls() const urls << QDir::homePath() + QStringLiteral("/Desktop"); } + if (m_hasDocumentsFolder) { + urls << QDir::homePath() + QStringLiteral("/Documents"); + } + if (m_hasDownloadsFolder) { urls << QDir::homePath() + QStringLiteral("/Downloads"); } - urls << QStringLiteral(KDE_ROOT_PATH) << QStringLiteral("trash:/") + if (m_hasMusicFolder) { + urls << QDir::homePath() + QStringLiteral("/Music"); + } + + if (m_hasPicturesFolder) { + urls << QDir::homePath() + QStringLiteral("/Pictures"); + } + + if (m_hasVideosFolder) { + urls << QDir::homePath() + QStringLiteral("/Videos"); + } + + urls << QStringLiteral("trash:/") << QStringLiteral("remote:/") - << QStringLiteral("/media/nfs") - << QStringLiteral("timeline:/today") << QStringLiteral("timeline:/yesterday") - << QStringLiteral("search:/documents") << QStringLiteral("search:/images") << QStringLiteral("search:/audio") << QStringLiteral("search:/videos") + << QStringLiteral("/media/nfs"); + + if (qEnvironmentVariableIsSet("KDE_FULL_SESSION") && KProtocolInfo::isKnownProtocol(QStringLiteral("recentlyused"))) { + urls << QStringLiteral("recentlyused:/files"); + urls << QStringLiteral("recentlyused:/locations"); + } else { + urls << QStringLiteral("timeline:/today") + << QStringLiteral("timeline:/yesterday"); + } + + urls << QStringLiteral("search:/documents") << QStringLiteral("search:/images") << QStringLiteral("search:/audio") << QStringLiteral("search:/videos") << QStringLiteral("/foreign") << QStringLiteral("/media/floppy0") << QStringLiteral("/media/XO-Y4") << QStringLiteral("/media/cdrom"); } @@ -190,7 +201,7 @@ void PlacesItemModelTest::createPlaceItem(const QString &text, const QUrl &url, m_model->createPlacesItem(text, url, icon); } -void PlacesItemModelTest::removePlaceAfter(int index) +void PlacesItemModelTest::schedulePlaceRemoval(int index) { m_tobeRemoved.insert(index); } @@ -200,15 +211,6 @@ void PlacesItemModelTest::cancelPlaceRemoval(int index) m_tobeRemoved.remove(index); } -void PlacesItemModelTest::removeTestUserData() -{ - // user hardcoded path to avoid removal of any user personal data - QDir dir(QStringLiteral("/home/renato/.qttest/share/placesitemmodeltest")); - if (dir.exists()) { - QVERIFY(dir.removeRecursively()); - } -} - QMimeData *PlacesItemModelTest::createMimeData(const QList &indexes) const { QByteArray itemData; @@ -232,6 +234,28 @@ QMimeData *PlacesItemModelTest::createMimeData(const QList &indexes) const return mimeData; } +void PlacesItemModelTest::increaseIndexIfNeeded(int &index) const +{ + if (m_hasDesktopFolder) { + index++; + } + if (m_hasDocumentsFolder) { + index++; + } + if (m_hasDownloadsFolder) { + index++; + } + if (m_hasMusicFolder) { + index++; + } + if (m_hasPicturesFolder) { + index++; + } + if (m_hasVideosFolder) { + index++; + } +} + void PlacesItemModelTest::init() { m_model = new PlacesItemModel(); @@ -251,14 +275,15 @@ void PlacesItemModelTest::cleanup() m_tobeRemoved.clear(); delete m_model; m_model = nullptr; - removeTestUserData(); } void PlacesItemModelTest::initTestCase() { + QVERIFY(m_tempHomeDir.isValid()); + QVERIFY(qputenv("HOME", m_tempHomeDir.path().toUtf8())); + QVERIFY(qputenv("KDE_FORK_SLAVES", "yes")); + QStandardPaths::setTestModeEnabled(true); - // remove test user data - removeTestUserData(); const QString fakeHw = QFINDTESTDATA("data/fakecomputer.xml"); QVERIFY(!fakeHw.isEmpty()); @@ -276,11 +301,31 @@ void PlacesItemModelTest::initTestCase() m_expectedModelCount++; } + if (QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)).exists()) { + m_hasDocumentsFolder = true; + m_expectedModelCount++; + } + if (QDir(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)).exists()) { m_hasDownloadsFolder = true; m_expectedModelCount++; } + if (QDir(QStandardPaths::writableLocation(QStandardPaths::MusicLocation)).exists()) { + m_hasMusicFolder = true; + m_expectedModelCount++; + } + + if (QDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)).exists()) { + m_hasPicturesFolder = true; + m_expectedModelCount++; + } + + if (QDir(QStandardPaths::writableLocation(QStandardPaths::MoviesLocation)).exists()) { + m_hasVideosFolder = true; + m_expectedModelCount++; + } + qRegisterMetaType(); qRegisterMetaType(); } @@ -289,9 +334,6 @@ void PlacesItemModelTest::cleanupTestCase() { qDeleteAll(m_interfacesMap); QFile::remove(bookmarksFile()); - - // Remove any previous properties file - removeTestUserData(); } void PlacesItemModelTest::testModelSort() @@ -302,32 +344,27 @@ void PlacesItemModelTest::testModelSort() void PlacesItemModelTest::testGroups() { const auto groups = m_model->groups(); - int expectedGroupSize = 3; - if (m_hasDesktopFolder) { - expectedGroupSize++; - } - if (m_hasDownloadsFolder) { - expectedGroupSize++; - } + int expectedRemoteIndex = 2; + increaseIndexIfNeeded(expectedRemoteIndex); QCOMPARE(groups.size(), 6); QCOMPARE(groups.at(0).first, 0); QCOMPARE(groups.at(0).second.toString(), QStringLiteral("Places")); - QCOMPARE(groups.at(1).first, expectedGroupSize); + QCOMPARE(groups.at(1).first, expectedRemoteIndex); QCOMPARE(groups.at(1).second.toString(), QStringLiteral("Remote")); - QCOMPARE(groups.at(2).first, expectedGroupSize + 2); - QCOMPARE(groups.at(2).second.toString(), QStringLiteral("Recently Saved")); + QCOMPARE(groups.at(2).first, expectedRemoteIndex + 2); + QCOMPARE(groups.at(2).second.toString(), QStringLiteral("Recent")); - QCOMPARE(groups.at(3).first, expectedGroupSize + 4); + QCOMPARE(groups.at(3).first, expectedRemoteIndex + 4); QCOMPARE(groups.at(3).second.toString(), QStringLiteral("Search For")); - QCOMPARE(groups.at(4).first, expectedGroupSize + 8); + QCOMPARE(groups.at(4).first, expectedRemoteIndex + 8); QCOMPARE(groups.at(4).second.toString(), QStringLiteral("Devices")); - QCOMPARE(groups.at(5).first, expectedGroupSize + 9); + QCOMPARE(groups.at(5).first, expectedRemoteIndex + 9); QCOMPARE(groups.at(5).second.toString(), QStringLiteral("Removable Devices")); } @@ -345,9 +382,6 @@ void PlacesItemModelTest::testPlaceItem_data() // baloo -search QTest::newRow("Baloo - Documents") << QUrl("search:/documents") << false << true << QStringLiteral("Search For") << false; - // baloo - timeline - QTest::newRow("Baloo - Today") << QUrl("timeline:/today") << false << true << QStringLiteral("Recently Saved") << false; - // devices QTest::newRow("Devices - Floppy") << QUrl("file:///media/floppy0") << false << false << QStringLiteral("Removable Devices") << false; } @@ -378,13 +412,8 @@ void PlacesItemModelTest::testDeletePlace() PlacesItemModel *model = new PlacesItemModel(); - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); // create a new place createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString()); @@ -460,9 +489,6 @@ void PlacesItemModelTest::testDefaultViewProperties_data() // audio files QTest::newRow("Places - Audio") << QUrl("search:/audio") << DolphinView::DetailsView << false << QList({"text", "artist", "album"}); - // baloo - timeline - QTest::newRow("Baloo - Today") << QUrl("timeline:/today") << DolphinView::DetailsView << true << QList({"text", "modificationtime"}); - // devices QTest::newRow("Devices - Floppy") << QUrl("file:///media/floppy0") << DolphinView::IconsView << true << QList({"text"}); @@ -475,10 +501,20 @@ void PlacesItemModelTest::testDefaultViewProperties() QFETCH(bool, expectedPreviewShow); QFETCH(QList, expectedVisibleRole); + // In order to test the default view properties, turn off the global view properties and re-init the test to reload the model. + GeneralSettings* settings = GeneralSettings::self(); + settings->setGlobalViewProps(false); + settings->save(); + cleanup(); + init(); + ViewProperties properties(KFilePlacesModel::convertedUrl(url)); QCOMPARE(properties.viewMode(), expectedViewMode); QCOMPARE(properties.previewsShown(), expectedPreviewShow); QCOMPARE(properties.visibleRoles(), expectedVisibleRole); + + settings->setGlobalViewProps(true); + settings->save(); } void PlacesItemModelTest::testClear() @@ -541,13 +577,8 @@ void PlacesItemModelTest::testHideItem() void PlacesItemModelTest::testSystemItems() { - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); QCOMPARE(m_model->count(), m_expectedModelCount); for (int r = 0; r < m_model->count(); r++) { @@ -563,7 +594,7 @@ void PlacesItemModelTest::testSystemItems() QTRY_COMPARE(itemsInsertedSpy.count(), 1); // make sure the new place get removed - removePlaceAfter(tempDirIndex); + schedulePlaceRemoval(tempDirIndex); QList args = itemsInsertedSpy.takeFirst(); KItemRangeList range = args.at(0).value(); @@ -589,51 +620,41 @@ void PlacesItemModelTest::testSystemItems() void PlacesItemModelTest::testEditBookmark() { - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); QScopedPointer 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(tempDirIndex); + schedulePlaceRemoval(tempDirIndex); QSignalSpy itemsChangedSply(m_model, &PlacesItemModel::itemsChanged); // modify place text - m_model->item(3)->setText(QStringLiteral("Renamed place")); + m_model->item(tempDirIndex)->setText(QStringLiteral("Renamed place")); m_model->refresh(); // check if the correct signal was fired QTRY_COMPARE(itemsChangedSply.count(), 1); QList args = itemsChangedSply.takeFirst(); KItemRangeList range = args.at(0).value(); - QCOMPARE(range.first().index, 3); + QCOMPARE(range.first().index, tempDirIndex); QCOMPARE(range.first().count, 1); QSet roles = args.at(1).value >(); QCOMPARE(roles.size(), 1); QCOMPARE(*roles.begin(), QByteArrayLiteral("text")); - QCOMPARE(m_model->item(3)->text(), QStringLiteral("Renamed place")); + QCOMPARE(m_model->item(tempDirIndex)->text(), QStringLiteral("Renamed place")); // check if the item was updated in the other model - QTRY_COMPARE(other->item(3)->text(), QStringLiteral("Renamed place")); + QTRY_COMPARE(other->item(tempDirIndex)->text(), QStringLiteral("Renamed place")); } void PlacesItemModelTest::testEditAfterCreation() { - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted); @@ -646,31 +667,26 @@ void PlacesItemModelTest::testEditAfterCreation() QTRY_COMPARE(model->count(), m_model->count()); // make sure that the new item will be removed later - removePlaceAfter(tempDirIndex); + schedulePlaceRemoval(tempDirIndex); // modify place text - PlacesItem *item = m_model->placesItem(3); + PlacesItem *item = m_model->placesItem(tempDirIndex); item->setText(QStringLiteral("Renamed place")); m_model->refresh(); // check if the second model got the changes QTRY_COMPARE(model->count(), m_model->count()); - QTRY_COMPARE(model->placesItem(3)->text(), m_model->placesItem(3)->text()); - QTRY_COMPARE(model->placesItem(3)->bookmark().metaDataItem(QStringLiteral("OnlyInApp")), - m_model->placesItem(3)->bookmark().metaDataItem(QStringLiteral("OnlyInApp"))); - QTRY_COMPARE(model->placesItem(3)->icon(), m_model->placesItem(3)->icon()); - QTRY_COMPARE(model->placesItem(3)->url(), m_model->placesItem(3)->url()); + QTRY_COMPARE(model->placesItem(tempDirIndex)->text(), m_model->placesItem(tempDirIndex)->text()); + QTRY_COMPARE(model->placesItem(tempDirIndex)->bookmark().metaDataItem(QStringLiteral("OnlyInApp")), + m_model->placesItem(tempDirIndex)->bookmark().metaDataItem(QStringLiteral("OnlyInApp"))); + QTRY_COMPARE(model->placesItem(tempDirIndex)->icon(), m_model->placesItem(tempDirIndex)->icon()); + QTRY_COMPARE(model->placesItem(tempDirIndex)->url(), m_model->placesItem(tempDirIndex)->url()); } void PlacesItemModelTest::testEditMetadata() { - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted); @@ -684,32 +700,27 @@ void PlacesItemModelTest::testEditMetadata() QTRY_COMPARE(model->count(), m_model->count()); // make sure that the new item will be removed later - removePlaceAfter(tempDirIndex); + schedulePlaceRemoval(tempDirIndex); // modify place metadata - PlacesItem *item = m_model->placesItem(3); - item->bookmark().setMetaDataItem(QStringLiteral("OnlyInApp"), KAboutData::applicationData().componentName()); + auto bookmark = m_model->placesItem(tempDirIndex)->bookmark(); + bookmark.setMetaDataItem(QStringLiteral("OnlyInApp"), KAboutData::applicationData().componentName()); m_model->refresh(); // check if the place was modified in both models - QTRY_COMPARE(model->placesItem(3)->bookmark().metaDataItem(QStringLiteral("OnlyInApp")), + QTRY_COMPARE(model->placesItem(tempDirIndex)->bookmark().metaDataItem(QStringLiteral("OnlyInApp")), KAboutData::applicationData().componentName()); - QTRY_COMPARE(model->placesItem(3)->text(), m_model->placesItem(3)->text()); - QTRY_COMPARE(model->placesItem(3)->bookmark().metaDataItem(QStringLiteral("OnlyInApp")), - m_model->placesItem(3)->bookmark().metaDataItem(QStringLiteral("OnlyInApp"))); - QTRY_COMPARE(model->placesItem(3)->icon(), m_model->placesItem(3)->icon()); - QTRY_COMPARE(model->placesItem(3)->url(), m_model->placesItem(3)->url()); + QTRY_COMPARE(model->placesItem(tempDirIndex)->text(), m_model->placesItem(tempDirIndex)->text()); + QTRY_COMPARE(model->placesItem(tempDirIndex)->bookmark().metaDataItem(QStringLiteral("OnlyInApp")), + m_model->placesItem(tempDirIndex)->bookmark().metaDataItem(QStringLiteral("OnlyInApp"))); + QTRY_COMPARE(model->placesItem(tempDirIndex)->icon(), m_model->placesItem(tempDirIndex)->icon()); + QTRY_COMPARE(model->placesItem(tempDirIndex)->url(), m_model->placesItem(tempDirIndex)->url()); } void PlacesItemModelTest::testRefresh() { - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted); @@ -722,7 +733,7 @@ void PlacesItemModelTest::testRefresh() QTRY_COMPARE(model->count(), m_model->count()); // make sure that the new item will be removed later - removePlaceAfter(tempDirIndex); + schedulePlaceRemoval(tempDirIndex); PlacesItem *item = m_model->placesItem(tempDirIndex); PlacesItem *sameItem = model->placesItem(tempDirIndex); @@ -752,9 +763,6 @@ void PlacesItemModelTest::testIcons_data() // baloo -search QTest::newRow("Baloo - Documents") << QUrl("search:/documents") << QStringLiteral("folder-text"); - // baloo - timeline - QTest::newRow("Baloo - Today") << QUrl("timeline:/today") << QStringLiteral("go-jump-today"); - // devices QTest::newRow("Devices - Floppy") << QUrl("file:///media/floppy0") << QStringLiteral("blockdevice"); } @@ -774,17 +782,13 @@ void PlacesItemModelTest::testIcons() void PlacesItemModelTest::testDragAndDrop() { - int lastIndex = 2; // last index of places group - if (m_hasDesktopFolder) { - lastIndex++; - } - if (m_hasDownloadsFolder) { - lastIndex++; - } + int lastIndex = 1; // last index of places group + increaseIndexIfNeeded(lastIndex); QList args; KItemRangeList range; QStringList urls = initialUrls(); + QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted); QSignalSpy itemsRemovedSpy(m_model, &PlacesItemModel::itemsRemoved); @@ -893,13 +897,8 @@ void PlacesItemModelTest::testDuplicatedEntries() void PlacesItemModelTest::renameAfterCreation() { - int tempDirIndex = 3; - if (m_hasDesktopFolder) { - tempDirIndex++; - } - if (m_hasDownloadsFolder) { - tempDirIndex++; - } + int tempDirIndex = 2; + increaseIndexIfNeeded(tempDirIndex); const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); QStringList urls = initialUrls(); @@ -913,7 +912,7 @@ void PlacesItemModelTest::renameAfterCreation() urls.insert(tempDirIndex, tempUrl.toLocalFile()); // make sure that the new item will be removed later - removePlaceAfter(tempDirIndex); + schedulePlaceRemoval(tempDirIndex); CHECK_PLACES_URLS(urls); QCOMPARE(model->count(), m_model->count()); @@ -922,7 +921,7 @@ void PlacesItemModelTest::renameAfterCreation() // modify place text QSignalSpy changedSpy(m_model, &PlacesItemModel::itemsChanged); - PlacesItem *item = m_model->placesItem(3); + PlacesItem *item = m_model->placesItem(tempDirIndex); item->setText(QStringLiteral("New Temporary Dir")); item->setUrl(item->url()); item->setIcon(item->icon()); @@ -931,8 +930,8 @@ void PlacesItemModelTest::renameAfterCreation() QTRY_COMPARE(changedSpy.count(), 1); // check if the place was modified in both models - QTRY_COMPARE(m_model->placesItem(3)->text(), QStringLiteral("New Temporary Dir")); - QTRY_COMPARE(model->placesItem(3)->text(), QStringLiteral("New Temporary Dir")); + QTRY_COMPARE(m_model->placesItem(tempDirIndex)->text(), QStringLiteral("New Temporary Dir")); + QTRY_COMPARE(model->placesItem(tempDirIndex)->text(), QStringLiteral("New Temporary Dir")); } QTEST_MAIN(PlacesItemModelTest)