#include <KAboutData>
#include <KFilePlacesModel>
+#include "dolphin_generalsettings.h"
#include "panels/places/placesitemmodel.h"
#include "panels/places/placesitem.h"
#include "views/viewproperties.h"
QMap<QString, QDBusInterface *> m_interfacesMap;
int m_expectedModelCount = 15;
bool m_hasDesktopFolder = false;
+ bool m_hasDocumentsFolder = false;
bool m_hasDownloadsFolder = false;
void setBalooEnabled(bool enabled);
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<int> &indexes) const;
+ QTemporaryDir m_tempHomeDir;
};
#define CHECK_PLACES_URLS(urls) \
urls << QDir::homePath() + QStringLiteral("/Desktop");
}
+ if (m_hasDocumentsFolder) {
+ urls << QDir::homePath() + QStringLiteral("/Documents");
+ }
+
if (m_hasDownloadsFolder) {
urls << QDir::homePath() + QStringLiteral("/Downloads");
}
m_model->createPlacesItem(text, url, icon);
}
-void PlacesItemModelTest::removePlaceAfter(int index)
+void PlacesItemModelTest::schedulePlaceRemoval(int index)
{
m_tobeRemoved.insert(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<int> &indexes) const
{
QByteArray itemData;
void PlacesItemModelTest::init()
{
m_model = new PlacesItemModel();
- // WORKAROUND: need to wait for bookmark to load, check: PlacesItemModel::updateBookmarks
+ // WORKAROUND: need to wait for bookmark to load
QTest::qWait(300);
QCOMPARE(m_model->count(), m_expectedModelCount);
}
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());
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++;
{
qDeleteAll(m_interfacesMap);
QFile::remove(bookmarksFile());
-
- // Remove any previous properties file
- removeTestUserData();
}
void PlacesItemModelTest::testModelSort()
void PlacesItemModelTest::testGroups()
{
const auto groups = m_model->groups();
- int expectedGroupSize = 3;
+ int expectedRemoteIndex = 3;
if (m_hasDesktopFolder) {
- expectedGroupSize++;
+ expectedRemoteIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ expectedRemoteIndex++;
}
if (m_hasDownloadsFolder) {
- expectedGroupSize++;
+ 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).first, expectedRemoteIndex + 2);
QCOMPARE(groups.at(2).second.toString(), QStringLiteral("Recently Saved"));
- 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"));
}
PlacesItemModel *model = new PlacesItemModel();
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ 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);
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);
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>();
QFETCH(bool, expectedPreviewShow);
QFETCH(QList<QByteArray>, 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()
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>();
void PlacesItemModelTest::testSystemItems()
{
+ int tempDirIndex = 3;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ 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());
QTRY_COMPARE(itemsInsertedSpy.count(), 1);
// make sure the new place get removed
- removePlaceAfter(5);
+ schedulePlaceRemoval(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(), m_expectedModelCount);
//cancel removal (it was removed above)
- cancelPlaceRemoval(5);
+ cancelPlaceRemoval(tempDirIndex);
}
void PlacesItemModelTest::testEditBookmark()
{
+ int tempDirIndex = 1;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ 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);
+ schedulePlaceRemoval(tempDirIndex + 2);
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<QVariant> args = itemsChangedSply.takeFirst();
KItemRangeList range = args.at(0).value<KItemRangeList>();
- QCOMPARE(range.first().index, 3);
+ QCOMPARE(range.first().index, tempDirIndex);
QCOMPARE(range.first().count, 1);
QSet<QByteArray> roles = args.at(1).value<QSet<QByteArray> >();
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 = 1;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
QTRY_COMPARE(model->count(), m_model->count());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ schedulePlaceRemoval(tempDirIndex + 2);
// 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 = 1;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
QTRY_COMPARE(model->count(), m_model->count());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ schedulePlaceRemoval(tempDirIndex + 2);
// modify place metadata
- PlacesItem *item = m_model->placesItem(3);
+ PlacesItem *item = m_model->placesItem(tempDirIndex);
item->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_hasDocumentsFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
QTRY_COMPARE(model->count(), m_model->count());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ schedulePlaceRemoval(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
void PlacesItemModelTest::testDragAndDrop()
{
+ int lastIndex = 2; // last index of places group
+ if (m_hasDesktopFolder) {
+ lastIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ lastIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ lastIndex++;
+ }
+
QList<QVariant> args;
KItemRangeList range;
QStringList urls = initialUrls();
// 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);
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);
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);
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();
void PlacesItemModelTest::renameAfterCreation()
{
+ int tempDirIndex = 1;
+ if (m_hasDesktopFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDocumentsFolder) {
+ tempDirIndex++;
+ }
+ if (m_hasDownloadsFolder) {
+ tempDirIndex++;
+ }
+
const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
QStringList urls = initialUrls();
PlacesItemModel *model = new PlacesItemModel();
// create a new place
createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString());
- urls.insert(5, tempUrl.toLocalFile());
+ urls.insert(tempDirIndex + 2, tempUrl.toLocalFile());
// make sure that the new item will be removed later
- removePlaceAfter(5);
+ schedulePlaceRemoval(tempDirIndex + 2);
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);
+ PlacesItem *item = m_model->placesItem(tempDirIndex);
item->setText(QStringLiteral("New Temporary Dir"));
item->setUrl(item->url());
item->setIcon(item->icon());
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)