X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/94b2b2a2dbd3b861f74277b273ab268f28e8678a..9760f9607d:/src/tests/placesitemmodeltest.cpp diff --git a/src/tests/placesitemmodeltest.cpp b/src/tests/placesitemmodeltest.cpp index ef24292ed..e0fdb1d86 100644 --- a/src/tests/placesitemmodeltest.cpp +++ b/src/tests/placesitemmodeltest.cpp @@ -19,13 +19,9 @@ #include #include -#include -#include -#include #include #include #include -#include #include #include @@ -36,7 +32,6 @@ #include "panels/places/placesitemmodel.h" #include "panels/places/placesitem.h" #include "views/viewproperties.h" -#include "kitemviews/kitemrange.h" Q_DECLARE_METATYPE(KItemRangeList) Q_DECLARE_METATYPE(KItemRange) @@ -83,11 +78,14 @@ private slots: void testIcons(); void testDragAndDrop(); void testHideDevices(); + void testDuplicatedEntries(); + void renameAfterCreation(); private: PlacesItemModel* m_model; QSet m_tobeRemoved; QMap m_interfacesMap; + int m_expectedModelCount = 15; void setBalooEnabled(bool enabled); int indexOf(const QUrl &url); @@ -164,11 +162,15 @@ QStringList PlacesItemModelTest::initialUrls() const { static QStringList urls; if (urls.isEmpty()) { - urls << QDir::homePath() << QStringLiteral(KDE_ROOT_PATH) << QStringLiteral("trash:/") + urls << QDir::homePath() + << QDir::homePath() + QStringLiteral("/Desktop") + << QDir::homePath() + QStringLiteral("/Downloads") + << QStringLiteral(KDE_ROOT_PATH) << QStringLiteral("trash:/") << QStringLiteral("remote:/") - << QStringLiteral("timeline:/today") << QStringLiteral("timeline:/yesterday") << QStringLiteral("timeline:/thismonth") << QStringLiteral("timeline:/lastmonth") + << QStringLiteral("/media/nfs") + << QStringLiteral("timeline:/today") << QStringLiteral("timeline:/yesterday") << QStringLiteral("search:/documents") << QStringLiteral("search:/images") << QStringLiteral("search:/audio") << QStringLiteral("search:/videos") - << QStringLiteral("/media/nfs") << QStringLiteral("/foreign") + << QStringLiteral("/foreign") << QStringLiteral("/media/floppy0") << QStringLiteral("/media/XO-Y4") << QStringLiteral("/media/cdrom"); } return urls; @@ -226,12 +228,13 @@ 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() { - for (int i : m_tobeRemoved) { + const auto tobeRemoved = m_tobeRemoved; + for (const int i : tobeRemoved) { int before = m_model->count(); m_model->deleteItem(i); QTRY_COMPARE(m_model->count(), before - 1); @@ -259,6 +262,14 @@ void PlacesItemModelTest::initTestCase() QVERIFY(QFile::remove(bookmarsFileName)); } + if (QDir(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)).exists()) { + m_expectedModelCount++; + } + + if (QDir(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)).exists()) { + m_expectedModelCount++; + } + qRegisterMetaType(); qRegisterMetaType(); } @@ -281,21 +292,22 @@ void PlacesItemModelTest::testGroups() { const auto groups = m_model->groups(); + QCOMPARE(groups.size(), 6); QCOMPARE(groups.at(0).first, 0); QCOMPARE(groups.at(0).second.toString(), QStringLiteral("Places")); - QCOMPARE(groups.at(1).first, 3); + QCOMPARE(groups.at(1).first, 5); QCOMPARE(groups.at(1).second.toString(), QStringLiteral("Remote")); - QCOMPARE(groups.at(2).first, 4); + QCOMPARE(groups.at(2).first, 7); QCOMPARE(groups.at(2).second.toString(), QStringLiteral("Recently Saved")); - QCOMPARE(groups.at(3).first, 8); + QCOMPARE(groups.at(3).first, 9); QCOMPARE(groups.at(3).second.toString(), QStringLiteral("Search For")); - QCOMPARE(groups.at(4).first, 12); + QCOMPARE(groups.at(4).first, 13); QCOMPARE(groups.at(4).second.toString(), QStringLiteral("Devices")); QCOMPARE(groups.at(5).first, 14); @@ -317,7 +329,7 @@ void PlacesItemModelTest::testPlaceItem_data() QTest::newRow("Baloo - Documents") << QUrl("search:/documents") << false << true << QStringLiteral("Search For") << false; // baloo - timeline - QTest::newRow("Baloo - Last Month") << QUrl("timeline:/lastmonth") << false << true << QStringLiteral("Recently Saved") << false; + 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; @@ -351,7 +363,7 @@ void PlacesItemModelTest::testDeletePlace() // create a new place createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString()); - urls.insert(3, tempUrl.toLocalFile()); + urls.insert(5, tempUrl.toLocalFile()); // check if the new entry was created QTRY_COMPARE(itemsInsertedSpy.count(), 1); @@ -359,7 +371,7 @@ void PlacesItemModelTest::testDeletePlace() QTRY_COMPARE(model->count(), m_model->count()); // delete item - m_model->deleteItem(3); + m_model->deleteItem(5); // make sure that the new item is removed QTRY_COMPARE(itemsRemovedSpy.count(), 1); @@ -424,7 +436,7 @@ void PlacesItemModelTest::testDefaultViewProperties_data() QTest::newRow("Places - Audio") << QUrl("search:/audio") << DolphinView::DetailsView << false << QList({"text", "artist", "album"}); // baloo - timeline - QTest::newRow("Baloo - Last Month") << QUrl("timeline:/lastmonth") << DolphinView::DetailsView << true << QList({"text", "modificationtime"}); + 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"}); @@ -518,39 +530,38 @@ void PlacesItemModelTest::testSystemItems() QTRY_COMPARE(itemsInsertedSpy.count(), 1); // make sure the new place get removed - removePlaceAfter(3); + removePlaceAfter(5); QList args = itemsInsertedSpy.takeFirst(); KItemRangeList range = args.at(0).value(); - QCOMPARE(range.first().index, 3); + QCOMPARE(range.first().index, 5); QCOMPARE(range.first().count, 1); - QVERIFY(!m_model->placesItem(3)->isSystemItem()); + QVERIFY(!m_model->placesItem(5)->isSystemItem()); QCOMPARE(m_model->count(), 18); QTest::qWait(300); // check if the removal signal is correct QSignalSpy itemsRemovedSpy(m_model, &PlacesItemModel::itemsRemoved); - m_model->deleteItem(3); + m_model->deleteItem(5); QTRY_COMPARE(itemsRemovedSpy.count(), 1); args = itemsRemovedSpy.takeFirst(); range = args.at(0).value(); - QCOMPARE(range.first().index, 3); + QCOMPARE(range.first().index, 5); QCOMPARE(range.first().count, 1); QTRY_COMPARE(m_model->count(), 17); //cancel removal (it was removed above) - cancelPlaceRemoval(3); + cancelPlaceRemoval(5); } void PlacesItemModelTest::testEditBookmark() { - const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); 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(3); + removePlaceAfter(5); QSignalSpy itemsChangedSply(m_model, &PlacesItemModel::itemsChanged); @@ -586,7 +597,7 @@ void PlacesItemModelTest::testEditAfterCreation() QTRY_COMPARE(model->count(), m_model->count()); // make sure that the new item will be removed later - removePlaceAfter(3); + removePlaceAfter(5); // modify place text PlacesItem *item = m_model->placesItem(3); @@ -616,7 +627,7 @@ void PlacesItemModelTest::testEditMetadata() QTRY_COMPARE(model->count(), m_model->count()); // make sure that the new item will be removed later - removePlaceAfter(3); + removePlaceAfter(5); // modify place metadata PlacesItem *item = m_model->placesItem(3); @@ -646,10 +657,10 @@ void PlacesItemModelTest::testRefresh() QTRY_COMPARE(model->count(), m_model->count()); // make sure that the new item will be removed later - removePlaceAfter(3); + removePlaceAfter(5); - PlacesItem *item = m_model->placesItem(3); - PlacesItem *sameItem = model->placesItem(3); + PlacesItem *item = m_model->placesItem(5); + PlacesItem *sameItem = model->placesItem(5); QCOMPARE(item->text(), sameItem->text()); // modify place text @@ -677,7 +688,7 @@ void PlacesItemModelTest::testIcons_data() QTest::newRow("Baloo - Documents") << QUrl("search:/documents") << QStringLiteral("folder-text"); // baloo - timeline - QTest::newRow("Baloo - Last Month") << QUrl("timeline:/lastmonth") << QStringLiteral("view-calendar-month"); + QTest::newRow("Baloo - Today") << QUrl("timeline:/today") << QStringLiteral("go-jump-today"); // devices QTest::newRow("Devices - Floppy") << QUrl("file:///media/floppy0") << QStringLiteral("blockdevice"); @@ -705,10 +716,10 @@ void PlacesItemModelTest::testDragAndDrop() QSignalSpy itemsRemovedSpy(m_model, &PlacesItemModel::itemsRemoved); CHECK_PLACES_URLS(initialUrls()); - // Move the KDE_ROOT_PATH at the end of the places list will case it to be moved to the end of the places group - QMimeData *dropData = createMimeData(QList() << 1); + // Move the home directory to the end of the places group + QMimeData *dropData = createMimeData(QList() << 0); m_model->dropMimeDataBefore(m_model->count() - 1, dropData); - urls.move(1, 2); + urls.move(0, 4); delete dropData; QTRY_COMPARE(itemsInsertedSpy.count(), 1); @@ -719,24 +730,24 @@ void PlacesItemModelTest::testDragAndDrop() range = args.at(0).value(); QCOMPARE(range.size(), 1); QCOMPARE(range.at(0).count, 1); - QCOMPARE(range.at(0).index, 1); + QCOMPARE(range.at(0).index, 0); // insert intem in his group args = itemsInsertedSpy.takeFirst(); range = args.at(0).value(); QCOMPARE(range.size(), 1); QCOMPARE(range.at(0).count, 1); - QCOMPARE(range.at(0).index, 2); + QCOMPARE(range.at(0).index, 4); CHECK_PLACES_URLS(urls); itemsInsertedSpy.clear(); itemsRemovedSpy.clear(); - // Move the KDE_ROOT_PATH to his original position - dropData = createMimeData(QList() << 2); - m_model->dropMimeDataBefore(1, dropData); - urls.move(2, 1); + // Move home directory item back to its original position + dropData = createMimeData(QList() << 4); + m_model->dropMimeDataBefore(0, dropData); + urls.move(4, 0); delete dropData; QTRY_COMPARE(itemsInsertedSpy.count(), 1); @@ -747,14 +758,14 @@ void PlacesItemModelTest::testDragAndDrop() range = args.at(0).value(); QCOMPARE(range.size(), 1); QCOMPARE(range.at(0).count, 1); - QCOMPARE(range.at(0).index, 2); + QCOMPARE(range.at(0).index, 4); // insert intem in the requested position args = itemsInsertedSpy.takeFirst(); range = args.at(0).value(); QCOMPARE(range.size(), 1); QCOMPARE(range.at(0).count, 1); - QCOMPARE(range.at(0).index, 1); + QCOMPARE(range.at(0).index, 0); CHECK_PLACES_URLS(urls); } @@ -780,6 +791,67 @@ void PlacesItemModelTest::testHideDevices() m_model = new PlacesItemModel(); QTRY_COMPARE(m_model->count(), urls.count()); CHECK_PLACES_URLS(urls); + + // revert changes + m_model->setGroupHidden(KFilePlacesModel::RemovableDevicesType, false); + urls = initialUrls(); + QTRY_COMPARE(m_model->count(), urls.count()); + CHECK_PLACES_URLS(urls); +} + +void PlacesItemModelTest::testDuplicatedEntries() +{ + QStringList urls = initialUrls(); + // create a duplicated entry on bookmark + KBookmarkManager *bookmarkManager = KBookmarkManager::managerForFile(bookmarksFile(), QStringLiteral("kfilePlaces")); + KBookmarkGroup root = bookmarkManager->root(); + KBookmark bookmark = root.addBookmark(QStringLiteral("Duplicated Search Videos"), QUrl("search:/videos"), {}); + + const QString id = QUuid::createUuid().toString(); + bookmark.setMetaDataItem(QStringLiteral("ID"), id); + bookmark.setMetaDataItem(QStringLiteral("OnlyInApp"), KAboutData::applicationData().componentName()); + bookmarkManager->emitChanged(bookmarkManager->root()); + + PlacesItemModel *newModel = new PlacesItemModel(); + QTRY_COMPARE(placesUrls(newModel).count(QStringLiteral("search:/videos")), 1); + QTRY_COMPARE(urls, placesUrls(newModel)); + delete newModel; +} + +void PlacesItemModelTest::renameAfterCreation() +{ + const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation)); + QStringList urls = initialUrls(); + PlacesItemModel *model = new PlacesItemModel(); + + CHECK_PLACES_URLS(urls); + QTRY_COMPARE(model->count(), m_model->count()); + + // create a new place + createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString()); + urls.insert(5, tempUrl.toLocalFile()); + + // make sure that the new item will be removed later + removePlaceAfter(5); + + CHECK_PLACES_URLS(urls); + QCOMPARE(model->count(), m_model->count()); + + + // modify place text + QSignalSpy changedSpy(m_model, &PlacesItemModel::itemsChanged); + + PlacesItem *item = m_model->placesItem(3); + item->setText(QStringLiteral("New Temporary Dir")); + item->setUrl(item->url()); + item->setIcon(item->icon()); + m_model->refresh(); + + 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")); } QTEST_MAIN(PlacesItemModelTest)