#include <QTest>
#include <QSignalSpy>
-#include <QDebug>
-#include <QList>
-#include <QByteArray>
#include <QStandardPaths>
#include <QAction>
#include <QDBusInterface>
-#include <QUrlQuery>
#include <KBookmarkManager>
#include <KConfig>
#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)
void testDragAndDrop();
void testHideDevices();
void testDuplicatedEntries();
+ void renameAfterCreation();
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);
{
static QStringList urls;
if (urls.isEmpty()) {
- urls << QDir::homePath() << 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("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;
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);
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>();
}
{
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);
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;
// 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);
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);
- QTRY_COMPARE(m_model->count(), 17);
+ QTRY_COMPARE(m_model->count(), m_expectedModelCount);
CHECK_PLACES_URLS(initialUrls());
QTRY_COMPARE(model->count(), m_model->count());
}
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");
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);
QTest::newRow("Places - Audio") << QUrl("search:/audio") << DolphinView::DetailsView << false << QList<QByteArray>({"text", "artist", "album"});
// baloo - timeline
- QTest::newRow("Baloo - Last Month") << QUrl("timeline:/lastmonth") << DolphinView::DetailsView << true << QList<QByteArray>({"text", "modificationtime"});
+ QTest::newRow("Baloo - Today") << QUrl("timeline:/today") << DolphinView::DetailsView << true << QList<QByteArray>({"text", "modificationtime"});
// devices
QTest::newRow("Devices - Floppy") << QUrl("file:///media/floppy0") << DolphinView::IconsView << true << QList<QByteArray>({"text"});
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()
// 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);
+ 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());
}
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
// make sure the new place get removed
- removePlaceAfter(3);
+ removePlaceAfter(5);
QList<QVariant> args = itemsInsertedSpy.takeFirst();
KItemRangeList range = args.at(0).value<KItemRangeList>();
- 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<KItemRangeList>();
- QCOMPARE(range.first().index, 3);
+ QCOMPARE(range.first().index, 5);
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(3);
+ cancelPlaceRemoval(5);
}
void PlacesItemModelTest::testEditBookmark()
{
- const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
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(3);
+ removePlaceAfter(5);
QSignalSpy itemsChangedSply(m_model, &PlacesItemModel::itemsChanged);
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);
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);
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
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");
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<int>() << 1);
+ // 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(1, 2);
+ urls.move(0, 4);
delete dropData;
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
range = args.at(0).value<KItemRangeList>();
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<KItemRangeList>();
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<int>() << 2);
- m_model->dropMimeDataBefore(1, dropData);
- urls.move(2, 1);
+ // Move home directory item back to its original position
+ dropData = createMimeData(QList<int>() << 4);
+ m_model->dropMimeDataBefore(0, dropData);
+ urls.move(4, 0);
delete dropData;
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
range = args.at(0).value<KItemRangeList>();
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<KItemRangeList>();
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);
}
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)
#include "placesitemmodeltest.moc"