X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fdf854bd81d9e42df2d8672d49a0b7fcdb7443a5..d26e3cae9f0e22a1195ed413b045f17a691f20ee:/src/tests/viewpropertiestest.cpp diff --git a/src/tests/viewpropertiestest.cpp b/src/tests/viewpropertiestest.cpp index 9c2c9466b..9252f17ba 100644 --- a/src/tests/viewpropertiestest.cpp +++ b/src/tests/viewpropertiestest.cpp @@ -28,6 +28,8 @@ private Q_SLOTS: void testParamMigrationToFileAttr(); void testParamMigrationToFileAttrKeepDirectory(); void testExtendedAttributeFull(); + void testUseAsDefaultViewSettings(); + void testUseAsCustomDefaultViewSettings(); private: bool m_globalViewProps; @@ -37,6 +39,9 @@ private: void ViewPropertiesTest::initTestCase() { QStandardPaths::setTestModeEnabled(true); + + GeneralSettings::self()->setViewPropsTimestamp(QDateTime::currentDateTime()); + QVERIFY(GeneralSettings::self()->save()); } void ViewPropertiesTest::init() @@ -82,28 +87,30 @@ void ViewPropertiesTest::testReadOnlyBehavior() void ViewPropertiesTest::testReadOnlyDirectory() { - auto localFolder = m_testDir->url().toLocalFile(); - QString dotDirectoryFile = localFolder + "/.directory"; + const QUrl testDirUrl = m_testDir->url(); + const QString localFolder = testDirUrl.toLocalFile(); + const QString dotDirectoryFile = localFolder + "/.directory"; QVERIFY(!QFile::exists(dotDirectoryFile)); // restrict write permissions QVERIFY(QFile(localFolder).setPermissions(QFileDevice::ReadOwner)); - QScopedPointer props(new ViewProperties(m_testDir->url())); + QScopedPointer props(new ViewProperties(testDirUrl)); + const QString destinationDir = props->destinationDir(QStringLiteral("local")) + localFolder; + QVERIFY(props->isAutoSaveEnabled()); props->setSortRole("someNewSortRole"); props.reset(); - const auto destinationDir = props->destinationDir(QStringLiteral("local")) + localFolder; qDebug() << destinationDir; QVERIFY(QDir(destinationDir).exists()); QVERIFY(!QFile::exists(dotDirectoryFile)); KFileMetaData::UserMetaData metadata(localFolder); - auto viewProperties = metadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); + const QString viewProperties = metadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); QVERIFY(viewProperties.isEmpty()); - props.reset(new ViewProperties(m_testDir->url())); + props.reset(new ViewProperties(testDirUrl)); QVERIFY(props->isAutoSaveEnabled()); QCOMPARE(props->sortRole(), "someNewSortRole"); props.reset(); @@ -276,6 +283,114 @@ void ViewPropertiesTest::testExtendedAttributeFull() } } +void ViewPropertiesTest::testUseAsDefaultViewSettings() +{ + // Create a global viewproperties folder + QUrl globalPropertiesPath = + QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).append("/view_properties/").append(QStringLiteral("global"))); + QVERIFY(QDir().mkpath(globalPropertiesPath.toLocalFile())); + auto cleanupGlobalDir = qScopeGuard([globalPropertiesPath] { + QDir().rmdir(globalPropertiesPath.toLocalFile()); + }); + ViewProperties globalProps(globalPropertiesPath); + + // Check that theres no .directory file and metadata is supported + QString dotDirectoryFile = m_testDir->url().toLocalFile() + "/.directory"; + QVERIFY(!QFile::exists(dotDirectoryFile)); + KFileMetaData::UserMetaData testDirMetadata(m_testDir->url().toLocalFile()); + KFileMetaData::UserMetaData globalDirMetadata(globalPropertiesPath.toLocalFile()); + if (!testDirMetadata.isSupported()) { + QSKIP("need extended attribute/filesystem metadata to be usefull"); + } + + const auto newDefaultViewMode = DolphinView::Mode::DetailsView; + + // Equivalent of useAsDefault in ViewPropertiesDialog + // This sets the DetailsView as default viewMode + GeneralSettings::setGlobalViewProps(true); + globalProps.setViewMode(newDefaultViewMode); + globalProps.setDirProperties(globalProps); + globalProps.save(); + GeneralSettings::setGlobalViewProps(false); + + // Load default data + QScopedPointer globalDirProperties(new ViewProperties(globalPropertiesPath)); + auto defaultData = globalDirProperties.data(); + + // Load testdir data + QScopedPointer testDirProperties(new ViewProperties(m_testDir->url())); + auto testData = testDirProperties.data(); + + // Make sure globalDirProperties are not empty, so they will be used + auto globalDirPropString = globalDirMetadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); + QVERIFY(!globalDirPropString.isEmpty()); + + // Make sure testDirProperties is empty, so default values are used for it + auto testDirPropString = testDirMetadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); + QVERIFY(testDirPropString.isEmpty()); + + // Compare that default and new folder viewMode is the new default + QCOMPARE(defaultData->viewMode(), newDefaultViewMode); + QCOMPARE(testData->viewMode(), defaultData->viewMode()); +} + +void ViewPropertiesTest::testUseAsCustomDefaultViewSettings() +{ + // Create a global viewproperties folder + QUrl globalPropertiesPath = + QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).append("/view_properties/").append(QStringLiteral("global"))); + QVERIFY(QDir().mkpath(globalPropertiesPath.toLocalFile())); + auto cleanupGlobalDir = qScopeGuard([globalPropertiesPath] { + QDir().rmdir(globalPropertiesPath.toLocalFile()); + }); + ViewProperties globalProps(globalPropertiesPath); + + // Check that theres no .directory file and metadata is supported + QString dotDirectoryFile = m_testDir->url().toLocalFile() + "/.directory"; + QVERIFY(!QFile::exists(dotDirectoryFile)); + KFileMetaData::UserMetaData testDirMetadata(m_testDir->url().toLocalFile()); + KFileMetaData::UserMetaData globalDirMetadata(globalPropertiesPath.toLocalFile()); + if (!testDirMetadata.isSupported()) { + QSKIP("need extended attribute/filesystem metadata to be usefull"); + } + + // Equivalent of useAsDefault in ViewPropertiesDialog + // This sets the DetailsView as default viewMode + GeneralSettings::setGlobalViewProps(true); + globalProps.setViewMode(DolphinView::Mode::DetailsView); + globalProps.setDirProperties(globalProps); + globalProps.save(); + GeneralSettings::setGlobalViewProps(false); + + // Make sure globalDirProperties are not empty, so they will be used + auto globalDirPropString = globalDirMetadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); + QVERIFY(!globalDirPropString.isEmpty()); + + // Load default data + QScopedPointer globalDirProperties(new ViewProperties(globalPropertiesPath)); + auto defaultData = globalDirProperties.data(); + QCOMPARE(defaultData->viewMode(), DolphinView::Mode::DetailsView); + + // Load testdir data, set to icon, i.e default hardcoded, not current user default + QScopedPointer testDirProperties(new ViewProperties(m_testDir->url())); + testDirProperties->setViewMode(DolphinView::Mode::IconsView); + testDirProperties->save(); + + // testDirProperties is not default + auto testDirPropString = testDirMetadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); + QVERIFY(!testDirPropString.isEmpty()); + QCOMPARE(testDirProperties.data()->viewMode(), DolphinView::Mode::IconsView); + + // testDirProperties is now default + testDirProperties->setViewMode(DolphinView::Mode::DetailsView); + testDirProperties->save(); + + // no more metedata => the defaults settings are in effect for the folder + testDirPropString = testDirMetadata.attribute(QStringLiteral("kde.fm.viewproperties#1")); + QVERIFY(testDirPropString.isEmpty()); + QCOMPARE(testDirProperties.data()->viewMode(), DolphinView::Mode::DetailsView); +} + QTEST_GUILESS_MAIN(ViewPropertiesTest) #include "viewpropertiestest.moc"