diff --git a/autotests/unit/file/fileindexerconfigtest.h b/autotests/unit/file/fileindexerconfigtest.h new file mode 100644 --- /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 diff --git a/autotests/unit/file/fileindexerconfigtest.cpp b/autotests/unit/file/fileindexerconfigtest.cpp --- a/autotests/unit/file/fileindexerconfigtest.cpp +++ b/autotests/unit/file/fileindexerconfigtest.cpp @@ -1,6 +1,7 @@ /* - 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 @@ -19,6 +20,7 @@ License along with this library. If not, see . */ +#include "fileindexerconfigtest.h" #include "fileindexerconfig.h" #include "fileindexerconfigutils.h" @@ -29,276 +31,420 @@ #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)