diff --git a/autotests/unit/file/fileindexerconfigtest.cpp b/autotests/unit/file/fileindexerconfigtest.cpp index 7221f3ac..95a45f96 100644 --- a/autotests/unit/file/fileindexerconfigtest.cpp +++ b/autotests/unit/file/fileindexerconfigtest.cpp @@ -1,304 +1,450 @@ /* - This file is part of the Nepomuk KDE project. + This file is part of the Baloo KDE project. Copyright (C) 2011 Sebastian Trueg + Copyright (C) 2018 Michael Heidelbach This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ +#include "fileindexerconfigtest.h" #include "fileindexerconfig.h" #include "fileindexerconfigutils.h" #include #include #include #include #include + using namespace Baloo::Test; -class FileIndexerConfigTest : public QObject +namespace +{ +const QString excludeFilter1 = QStringLiteral("build"); +const QString excludeFilter2 = QStringLiteral("foo?ar"); + +const QString excludedFilterSubDir1 = indexedRootDir + QLatin1String("/") + excludeFilter1; +const QString excludedFilterSubSubDir1 = excludedFilterSubDir1 + QLatin1String("/sub1"); + +const QString excludedFilterSubDir2 = indexedRootDir + QLatin1String("/foobar"); +const QString excludedFilterSubSubDir2 = excludedFilterSubDir2 + QLatin1String("/sub2"); + +const QString includedFilterSubDir = excludedFilterSubDir1 + QLatin1String("/sub3"); +const QString includedFilterSubSubDir = includedFilterSubDir + QLatin1String("/sub"); +} + +void FileIndexerConfigTest::initTestCase() +{ + + m_mainDir = createTmpFolders(QStringList{ + indexedRootDir, + indexedSubDir, + indexedSubSubDir, + excludedSubDir, + excludedSubSubDir, + hiddenSubSubDir, + ignoredSubFolderToIndexedHidden, + indexedSubFolderToIndexedHidden, + indexedSubDirToExcluded, + indexedHiddenSubDirToExcluded, + excludedRootDir, + hiddenSubDir, + indexedHiddenSubDir, + ignoredRootDir, + + excludedFilterSubDir1, + excludedFilterSubSubDir1, + excludedFilterSubDir2, + excludedFilterSubSubDir2, + includedFilterSubDir, + includedFilterSubSubDir + }); + m_dirPrefix = m_mainDir->path() + QLatin1Char('/'); +} + +void FileIndexerConfigTest::cleanupTestCase() { - Q_OBJECT + delete m_mainDir; +} -private Q_SLOTS: - void testShouldFolderBeIndexed(); - void testShouldBeIndexed(); - void testExcludeFilterOnFolders(); -}; +void FileIndexerConfigTest::testShouldFolderBeIndexed_data() +{ + const auto indexed = QStringList{ + indexedRootDir, + indexedSubDir, + indexedSubSubDir, + indexedSubFolderToIndexedHidden, + indexedSubDirToExcluded, + indexedHiddenSubDir + }; + + const auto excluded = QStringList{ + excludedSubSubDir, + hiddenSubSubDir, + ignoredSubFolderToIndexedHidden, + excludedSubDir, + hiddenSubDir, + ignoredRootDir, + excludedRootDir + }; + + QTest::addColumn("path"); + QTest::addColumn("shouldBeIndexed"); + + for (const auto& key : indexed) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : excluded) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } +} void FileIndexerConfigTest::testShouldFolderBeIndexed() { - // create the full folder hierarchy - QTemporaryDir* mainDir = createTmpFolders(QStringList() - << indexedRootDir - << indexedSubDir - << indexedSubSubDir - << excludedSubSubDir - << hiddenSubSubDir - << ignoredSubFolderToIndexedHidden - << indexedSubFolderToIndexedHidden - << excludedRootDir - << hiddenSubDir - << indexedHiddenSubDir - << ignoredRootDir - << excludedRootDir); - - const QString dirPrefix = mainDir->path(); - - // write the config - writeIndexerConfig(QStringList() - << dirPrefix + indexedRootDir - << dirPrefix + indexedSubFolderToIndexedHidden - << dirPrefix + indexedHiddenSubDir - << dirPrefix + indexedSubDirToExcluded, - QStringList() - << dirPrefix + excludedRootDir - << dirPrefix + excludedSubDir - << dirPrefix + excludedSubSubDir, - QStringList(), - false); + writeIndexerConfig(QStringList{ + m_dirPrefix + indexedRootDir, + m_dirPrefix + indexedSubFolderToIndexedHidden, + m_dirPrefix + indexedHiddenSubDir, + m_dirPrefix + indexedSubDirToExcluded + }, + QStringList{ + m_dirPrefix + excludedRootDir, + m_dirPrefix + excludedSubDir, + m_dirPrefix + excludedSubSubDir + }, + QStringList(), + false); // create our test config object QScopedPointer cfg(new Baloo::FileIndexerConfig()); + QFETCH(QString, path); + QFETCH(bool, shouldBeIndexed); + + QCOMPARE(cfg->shouldFolderBeIndexed(path), shouldBeIndexed); +} + +void FileIndexerConfigTest::testShouldFolderBeIndexedHidden_data() +{ - // run through all the folders - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedRootDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + ignoredSubFolderToIndexedHidden)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubFolderToIndexedHidden)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDirToExcluded)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedHiddenSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + ignoredRootDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedRootDir)); - - - // re-write the config with hidden folder indexing enabled - writeIndexerConfig(QStringList() - << dirPrefix + indexedRootDir - << dirPrefix + indexedSubFolderToIndexedHidden - << dirPrefix + indexedHiddenSubDir - << dirPrefix + indexedSubDirToExcluded, - QStringList() - << dirPrefix + excludedRootDir - << dirPrefix + excludedSubDir - << dirPrefix + excludedSubSubDir, - QStringList(), - true); + const auto indexed = QStringList{ + indexedRootDir, + indexedSubDir, + indexedSubSubDir, + hiddenSubSubDir, + ignoredSubFolderToIndexedHidden, + indexedSubFolderToIndexedHidden, + indexedSubDirToExcluded, + hiddenSubDir, + indexedHiddenSubDir + }; + const auto excluded = QStringList{ + excludedSubSubDir, + excludedSubDir, + ignoredRootDir, + excludedRootDir + }; + + QTest::addColumn("path"); + QTest::addColumn("shouldBeIndexed"); + + for (const auto& key : indexed) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : excluded) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } +} + +void FileIndexerConfigTest::testShouldFolderBeIndexedHidden() +{ + writeIndexerConfig(QStringList{ + m_dirPrefix + indexedRootDir, + m_dirPrefix + indexedSubFolderToIndexedHidden, + m_dirPrefix + indexedHiddenSubDir, + m_dirPrefix + indexedSubDirToExcluded + }, + QStringList{ + m_dirPrefix + excludedRootDir, + m_dirPrefix + excludedSubDir, + m_dirPrefix + excludedSubSubDir + }, + QStringList(), + true); + + // create our test config object + QScopedPointer cfg(new Baloo::FileIndexerConfig()); cfg->forceConfigUpdate(); - // run through all the folders - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedRootDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + ignoredSubFolderToIndexedHidden)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubFolderToIndexedHidden)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDirToExcluded)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedHiddenSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + ignoredRootDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedRootDir)); - - - // cleanup - delete mainDir; + QFETCH(QString, path); + QFETCH(bool, shouldBeIndexed); + + QCOMPARE(cfg->shouldFolderBeIndexed(path), shouldBeIndexed); +} + +void FileIndexerConfigTest::testShouldBeIndexed_data() +{ + const QString fileName = QStringLiteral("/somefile.txt"); + const auto indexed = QStringList{ + indexedRootDir, + indexedSubDir, + indexedSubSubDir, + indexedSubFolderToIndexedHidden, + indexedSubDirToExcluded, + indexedHiddenSubDir, + }; + const auto indexedFilenames = QStringList{ + indexedRootDir + fileName, + indexedSubDir + fileName, + indexedSubSubDir + fileName, + indexedSubFolderToIndexedHidden + fileName, + indexedSubDirToExcluded + fileName, + indexedHiddenSubDir + fileName + }; + const auto excluded = QStringList{ + excludedSubSubDir, + hiddenSubSubDir, + ignoredSubFolderToIndexedHidden, + excludedSubDir, + hiddenSubDir, + ignoredRootDir, + excludedRootDir, + }; + const auto excludedFilenames = QStringList{ + excludedSubSubDir + fileName, + hiddenSubSubDir + fileName, + ignoredSubFolderToIndexedHidden + fileName, + excludedSubDir + fileName, + hiddenSubDir + fileName, + ignoredRootDir + fileName, + excludedRootDir + fileName, + }; + + QTest::addColumn("path"); + QTest::addColumn("shouldBeIndexed"); + + for (const auto& key : indexed) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : indexedFilenames) { + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : excluded) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } + + for (const auto& key : excludedFilenames) { + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } } void FileIndexerConfigTest::testShouldBeIndexed() { - // create the full folder hierarchy - QTemporaryDir* mainDir = createTmpFolders(QStringList() - << indexedRootDir - << indexedSubDir - << indexedSubSubDir - << excludedSubSubDir - << hiddenSubSubDir - << ignoredSubFolderToIndexedHidden - << indexedSubFolderToIndexedHidden - << excludedRootDir - << hiddenSubDir - << indexedHiddenSubDir - << ignoredRootDir - << excludedRootDir); - - const QString dirPrefix = mainDir->path(); - - // write the config - writeIndexerConfig(QStringList() - << dirPrefix + indexedRootDir - << dirPrefix + indexedSubFolderToIndexedHidden - << dirPrefix + indexedHiddenSubDir - << dirPrefix + indexedSubDirToExcluded, - QStringList() - << dirPrefix + excludedRootDir - << dirPrefix + excludedSubDir - << dirPrefix + excludedSubSubDir, - QStringList(), - false); + writeIndexerConfig(QStringList{ + m_dirPrefix + indexedRootDir, + m_dirPrefix + indexedSubFolderToIndexedHidden, + m_dirPrefix + indexedHiddenSubDir, + m_dirPrefix + indexedSubDirToExcluded + }, + QStringList{ + m_dirPrefix + excludedRootDir, + m_dirPrefix + excludedSubDir, + m_dirPrefix + excludedSubSubDir + }, + QStringList(), + false); // create our test config object QScopedPointer cfg(new Baloo::FileIndexerConfig()); - - // run through all the folders - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedRootDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + ignoredSubFolderToIndexedHidden)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubFolderToIndexedHidden)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDirToExcluded)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedHiddenSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + ignoredRootDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedRootDir)); - - // run through all the folders with a file name attached - const QString fileName = QStringLiteral("/somefile.txt"); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedRootDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubSubDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubSubDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + hiddenSubSubDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + ignoredSubFolderToIndexedHidden + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubFolderToIndexedHidden + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubDirToExcluded + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + hiddenSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedHiddenSubDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + ignoredRootDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedRootDir + fileName)); - - - // re-write the config with hidden folder indexing enabled - writeIndexerConfig(QStringList() - << dirPrefix + indexedRootDir - << dirPrefix + indexedSubFolderToIndexedHidden - << dirPrefix + indexedHiddenSubDir - << dirPrefix + indexedSubDirToExcluded, - QStringList() - << dirPrefix + excludedRootDir - << dirPrefix + excludedSubDir - << dirPrefix + excludedSubSubDir, - QStringList(), - true); cfg->forceConfigUpdate(); - // run through all the folders - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedRootDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + ignoredSubFolderToIndexedHidden)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubFolderToIndexedHidden)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedSubDirToExcluded)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + hiddenSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedHiddenSubDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + ignoredRootDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedRootDir)); - - // run through all the folders with a file name attached - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedRootDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubSubDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + hiddenSubSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + ignoredSubFolderToIndexedHidden + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubFolderToIndexedHidden + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedSubDirToExcluded + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + hiddenSubDir + fileName)); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedHiddenSubDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + ignoredRootDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedRootDir + fileName)); - - // cleanup - delete mainDir; + QFETCH(QString, path); + QFETCH(bool, shouldBeIndexed); + + QCOMPARE(cfg->shouldBeIndexed(path), shouldBeIndexed); + } -void FileIndexerConfigTest::testExcludeFilterOnFolders() +void FileIndexerConfigTest::testShouldBeIndexedHidden_data() { - const QString excludeFilter1 = QStringLiteral("build"); - const QString excludeFilter2 = QStringLiteral("foo?ar"); - - const QString excludedSubDir1 = indexedRootDir + QLatin1String("/") + excludeFilter1; - const QString excludedSubSubDir1 = excludedSubDir1 + QLatin1String("/sub1"); - - const QString excludedSubDir2 = indexedRootDir + QLatin1String("/foobar"); - const QString excludedSubSubDir2 = excludedSubDir2 + QLatin1String("/sub2"); - - const QString includedSubDir = excludedSubDir1 + QLatin1String("/sub3"); - const QString includedSubSubDir = includedSubDir + QLatin1String("/sub"); - - // create the full folder hierarchy - QScopedPointer mainDir(createTmpFolders(QStringList() - << indexedRootDir - << excludedSubDir1 - << excludedSubSubDir1 - << excludedSubDir1 - << excludedSubSubDir2 - << includedSubDir)); - - const QString dirPrefix = mainDir->path(); - - // write the config with the exclude filters - writeIndexerConfig(QStringList() - << dirPrefix + indexedRootDir - << dirPrefix + includedSubDir, - QStringList(), - QStringList() - << excludeFilter1 - << excludeFilter2, - false); + const QString fileName = QStringLiteral("/somefile.txt"); + const auto indexed = QStringList{ + indexedRootDir, + indexedSubDir, + indexedSubSubDir, + hiddenSubSubDir, + ignoredSubFolderToIndexedHidden, + indexedSubFolderToIndexedHidden, + indexedSubDirToExcluded, + hiddenSubDir, + indexedHiddenSubDir + }; + const auto indexedFilenames = QStringList{ + indexedRootDir + fileName, + indexedSubDir + fileName, + indexedSubSubDir + fileName, + hiddenSubSubDir + fileName, + ignoredSubFolderToIndexedHidden + fileName, + indexedSubFolderToIndexedHidden + fileName, + indexedSubDirToExcluded + fileName, + hiddenSubDir + fileName, + indexedHiddenSubDir + fileName + }; + const auto excluded = QStringList{ + excludedSubSubDir, + excludedSubDir, + ignoredRootDir, + excludedRootDir + }; + const auto excludedFilenames = QStringList{ + excludedSubSubDir + fileName, + excludedSubDir + fileName, + ignoredRootDir + fileName, + excludedRootDir + fileName + }; + + QTest::addColumn("path"); + QTest::addColumn("shouldBeIndexed"); + + for (const auto& key : indexed) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : indexedFilenames) { + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : excluded) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } + + for (const auto& key : excludedFilenames) { + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } +} +void FileIndexerConfigTest::testShouldBeIndexedHidden() +{ + writeIndexerConfig(QStringList{ + m_dirPrefix + indexedRootDir, + m_dirPrefix + indexedSubFolderToIndexedHidden, + m_dirPrefix + indexedHiddenSubDir, + m_dirPrefix + indexedSubDirToExcluded + }, + QStringList{ + m_dirPrefix + excludedRootDir, + m_dirPrefix + excludedSubDir, + m_dirPrefix + excludedSubSubDir + }, + QStringList(), + true); + // create our test config object QScopedPointer cfg(new Baloo::FileIndexerConfig()); + cfg->forceConfigUpdate(); - // run through our folders that should be excluded - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + indexedRootDir)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubDir1)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubSubDir1)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubDir2)); - QVERIFY(!cfg->shouldFolderBeIndexed(dirPrefix + excludedSubSubDir2)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + includedSubDir)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + includedSubSubDir)); + QFETCH(QString, path); + QFETCH(bool, shouldBeIndexed); + + QCOMPARE(cfg->shouldBeIndexed(path), shouldBeIndexed); +} - // and some file checks +void FileIndexerConfigTest::testShouldExcludeFilterOnFolders_data() +{ const QString fileName = QStringLiteral("/somefile.txt"); - QVERIFY(cfg->shouldBeIndexed(dirPrefix + indexedRootDir + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubDir1 + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubSubDir1 + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubDir2 + fileName)); - QVERIFY(!cfg->shouldBeIndexed(dirPrefix + excludedSubSubDir2 + fileName)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + includedSubDir + fileName)); - QVERIFY(cfg->shouldFolderBeIndexed(dirPrefix + includedSubSubDir + fileName)); + const auto indexed = QStringList{ + indexedRootDir, + includedFilterSubDir, + includedFilterSubSubDir, + }; + const auto indexedFilenames = QStringList{ + indexedRootDir + fileName, + includedFilterSubDir + fileName, + includedFilterSubSubDir + fileName + }; + const auto excluded = QStringList{ + excludedFilterSubDir1, + excludedFilterSubSubDir1, + excludedFilterSubDir2, + excludedFilterSubSubDir2, + }; + const auto excludedFilenames = QStringList{ + excludedFilterSubDir1 + fileName, + excludedFilterSubSubDir1 + fileName, + excludedFilterSubDir2 + fileName, + excludedFilterSubSubDir2 + fileName + }; + + QTest::addColumn("path"); + QTest::addColumn("shouldBeIndexed"); + + for (const auto& key : indexed) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : indexedFilenames) { + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << true; + } + + for (const auto& key : excluded) { + QVERIFY2(QFileInfo(m_dirPrefix + key).isDir(), qPrintable(QStringLiteral("Not a folder: %1").arg(m_dirPrefix + key))); + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } + + for (const auto& key : excludedFilenames) { + QTest::addRow("%s", qPrintable(key)) << m_dirPrefix + key << false; + } } -QTEST_GUILESS_MAIN(FileIndexerConfigTest) +void FileIndexerConfigTest::testShouldExcludeFilterOnFolders() +{ + writeIndexerConfig(QStringList{ + m_dirPrefix + indexedRootDir, + m_dirPrefix + includedFilterSubDir + }, + QStringList(), + QStringList{ + excludeFilter1, + excludeFilter2 + }, + false); -#include "fileindexerconfigtest.moc" + // create our test config object + QFETCH(QString, path); + QFETCH(bool, shouldBeIndexed); + + QScopedPointer cfg(new Baloo::FileIndexerConfig()); + cfg->forceConfigUpdate(); //Maybe this was left out on purpose + + QCOMPARE(cfg->shouldFolderBeIndexed(path), shouldBeIndexed); +} + +QTEST_GUILESS_MAIN(FileIndexerConfigTest) diff --git a/autotests/unit/file/fileindexerconfigtest.h b/autotests/unit/file/fileindexerconfigtest.h new file mode 100644 index 00000000..2d8c28df --- /dev/null +++ b/autotests/unit/file/fileindexerconfigtest.h @@ -0,0 +1,61 @@ +/* + * This file is part of the Baloo KDE project. + * Copyright 2018 Michael Heidelbach + * + * 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) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * 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, see . + */ + +#ifndef INDEXERCONFIGTEST_H +#define INDEXERCONFIGTEST_H + +#include +// #include +class QTemporaryDir; + +namespace Baloo { +namespace Test { +class FileIndexerConfigTest : public QObject +{ + Q_OBJECT +private Q_SLOTS: + + void initTestCase(); + void cleanupTestCase(); + + void testShouldFolderBeIndexed(); + void testShouldFolderBeIndexed_data(); + + void testShouldFolderBeIndexedHidden(); + void testShouldFolderBeIndexedHidden_data(); + + void testShouldBeIndexed(); + void testShouldBeIndexed_data(); + + void testShouldBeIndexedHidden(); + void testShouldBeIndexedHidden_data(); + + void testShouldExcludeFilterOnFolders(); + void testShouldExcludeFilterOnFolders_data(); + +private: + QTemporaryDir* m_mainDir; + QString m_dirPrefix; +}; + +} +} +#endif // INDEXERCONFIGTEST_H