CppLocatorFilterTest: Add locator matchers tests

Change-Id: Ifc9b25bd8503c75724ffec2a0ebd855e61a19bc6
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Jarek Kobus
2023-04-06 10:54:27 +02:00
parent 778d7a9819
commit b30983d3c7

View File

@@ -3,8 +3,6 @@
#include "cpplocatorfilter_test.h" #include "cpplocatorfilter_test.h"
#include "cppcurrentdocumentfilter.h"
#include "cpplocatorfilter.h"
#include "cppmodelmanager.h" #include "cppmodelmanager.h"
#include "cpptoolstestcase.h" #include "cpptoolstestcase.h"
@@ -37,6 +35,7 @@ class CppLocatorFilterTestCase
{ {
public: public:
CppLocatorFilterTestCase(ILocatorFilter *filter, CppLocatorFilterTestCase(ILocatorFilter *filter,
const QList<LocatorMatcherTask> &matchers,
const QString &fileName, const QString &fileName,
const QString &searchText, const QString &searchText,
const ResultDataList &expectedResults) const ResultDataList &expectedResults)
@@ -47,7 +46,15 @@ public:
QVERIFY(!m_fileName.isEmpty()); QVERIFY(!m_fileName.isEmpty());
QVERIFY(garbageCollectGlobalSnapshot()); QVERIFY(garbageCollectGlobalSnapshot());
ResultDataList results = ResultData::fromFilterEntryList(matchesFor(searchText)); const auto runMatcher = [this, matchers, searchText] {
CppLocatorFilterTestCase::doBeforeLocatorRun();
const auto result = LocatorMatcher::runBlocking(matchers, searchText);
CppLocatorFilterTestCase::doAfterLocatorRun();
return result;
};
const QList<LocatorFilterEntry> entries = filter ? matchesFor(searchText) : runMatcher();
const ResultDataList results = ResultData::fromFilterEntryList(entries);
if (debug) { if (debug) {
ResultData::printFilterEntries(expectedResults, "Expected:"); ResultData::printFilterEntries(expectedResults, "Expected:");
ResultData::printFilterEntries(results, "Results:"); ResultData::printFilterEntries(results, "Results:");
@@ -114,31 +121,44 @@ private:
} // anonymous namespace } // anonymous namespace
using MatcherCreator = std::function<QList<LocatorMatcherTask>()>;
void LocatorFilterTest::testLocatorFilter() void LocatorFilterTest::testLocatorFilter()
{ {
QFETCH(QString, testFile); QFETCH(QString, testFile);
QFETCH(ILocatorFilter *, filter); QFETCH(ILocatorFilter *, filter);
QFETCH(MatcherCreator, matcherCreator);
QFETCH(QString, searchText); QFETCH(QString, searchText);
QFETCH(ResultDataList, expectedResults); QFETCH(ResultDataList, expectedResults);
Tests::VerifyCleanCppModelManager verify; {
Tests::VerifyCleanCppModelManager verify;
CppLocatorFilterTestCase(filter, {}, testFile, searchText, expectedResults);
}
CppLocatorFilterTestCase(filter, testFile, searchText, expectedResults); {
Tests::VerifyCleanCppModelManager verify;
CppLocatorFilterTestCase(nullptr, matcherCreator(), testFile, searchText, expectedResults);
}
} }
void LocatorFilterTest::testLocatorFilter_data() void LocatorFilterTest::testLocatorFilter_data()
{ {
QTest::addColumn<QString>("testFile"); QTest::addColumn<QString>("testFile");
QTest::addColumn<ILocatorFilter *>("filter"); QTest::addColumn<ILocatorFilter *>("filter");
QTest::addColumn<MatcherCreator>("matcherCreator");
QTest::addColumn<QString>("searchText"); QTest::addColumn<QString>("searchText");
QTest::addColumn<ResultDataList>("expectedResults"); QTest::addColumn<ResultDataList>("expectedResults");
CppModelManager *cppModelManager = CppModelManager::instance(); CppModelManager *cppModelManager = CppModelManager::instance();
ILocatorFilter *cppFunctionsFilter = cppModelManager->functionsFilter(); ILocatorFilter *cppFunctionsFilter = cppModelManager->functionsFilter();
ILocatorFilter *cppClassesFilter = cppModelManager->classesFilter(); ILocatorFilter *cppClassesFilter = cppModelManager->classesFilter();
ILocatorFilter *cppLocatorFilter = cppModelManager->locatorFilter(); ILocatorFilter *cppLocatorFilter = cppModelManager->locatorFilter();
const MatcherCreator functionMatcherCreator = &LocatorMatcher::functionMatchers;
const MatcherCreator classMatcherCreator = &LocatorMatcher::classMatchers;
const MatcherCreator locatorMatcherCreator = &LocatorMatcher::locatorMatchers;
MyTestDataDir testDirectory("testdata_basic"); MyTestDataDir testDirectory("testdata_basic");
QString testFile = testDirectory.file("file1.cpp"); QString testFile = testDirectory.file("file1.cpp");
testFile[0] = testFile[0].toLower(); // Ensure Windows path sorts after scope names. testFile[0] = testFile[0].toLower(); // Ensure Windows path sorts after scope names.
@@ -149,6 +169,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter") QTest::newRow("CppFunctionsFilter")
<< testFile << testFile
<< cppFunctionsFilter << cppFunctionsFilter
<< functionMatcherCreator
<< "function" << "function"
<< ResultDataList{ << ResultDataList{
ResultData("functionDefinedInClass(bool, int)", ResultData("functionDefinedInClass(bool, int)",
@@ -171,6 +192,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-Sorting") QTest::newRow("CppFunctionsFilter-Sorting")
<< testFile << testFile
<< cppFunctionsFilter << cppFunctionsFilter
<< functionMatcherCreator
<< "pos" << "pos"
<< ResultDataList{ << ResultDataList{
ResultData("positiveNumber()", testFileShort), ResultData("positiveNumber()", testFileShort),
@@ -182,6 +204,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-arguments") QTest::newRow("CppFunctionsFilter-arguments")
<< testFile << testFile
<< cppFunctionsFilter << cppFunctionsFilter
<< functionMatcherCreator
<< "function*bool" << "function*bool"
<< ResultDataList{ << ResultDataList{
ResultData("functionDefinedInClass(bool, int)", ResultData("functionDefinedInClass(bool, int)",
@@ -198,6 +221,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-WithNamespacePrefix") QTest::newRow("CppFunctionsFilter-WithNamespacePrefix")
<< testFile << testFile
<< cppFunctionsFilter << cppFunctionsFilter
<< functionMatcherCreator
<< "mynamespace::" << "mynamespace::"
<< ResultDataList{ << ResultDataList{
ResultData("MyClass()", "MyNamespace::MyClass (file1.cpp)"), ResultData("MyClass()", "MyNamespace::MyClass (file1.cpp)"),
@@ -213,6 +237,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-WithClassPrefix") QTest::newRow("CppFunctionsFilter-WithClassPrefix")
<< testFile << testFile
<< cppFunctionsFilter << cppFunctionsFilter
<< functionMatcherCreator
<< "MyClass::func" << "MyClass::func"
<< ResultDataList{ << ResultDataList{
ResultData("functionDefinedInClass(bool, int)", ResultData("functionDefinedInClass(bool, int)",
@@ -234,6 +259,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppClassesFilter") QTest::newRow("CppClassesFilter")
<< testFile << testFile
<< cppClassesFilter << cppClassesFilter
<< classMatcherCreator
<< "myclass" << "myclass"
<< ResultDataList{ << ResultDataList{
ResultData("MyClass", "<anonymous namespace>"), ResultData("MyClass", "<anonymous namespace>"),
@@ -244,6 +270,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppClassesFilter-WithNamespacePrefix") QTest::newRow("CppClassesFilter-WithNamespacePrefix")
<< testFile << testFile
<< cppClassesFilter << cppClassesFilter
<< classMatcherCreator
<< "mynamespace::" << "mynamespace::"
<< ResultDataList{ << ResultDataList{
ResultData("MyClass", "MyNamespace") ResultData("MyClass", "MyNamespace")
@@ -253,6 +280,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppLocatorFilter-filtered") QTest::newRow("CppLocatorFilter-filtered")
<< testFile << testFile
<< cppLocatorFilter << cppLocatorFilter
<< locatorMatcherCreator
<< "my" << "my"
<< ResultDataList{ << ResultDataList{
ResultData("MyClass", testFileShort), ResultData("MyClass", testFileShort),
@@ -279,6 +307,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppClassesFilter-ObjC") QTest::newRow("CppClassesFilter-ObjC")
<< objTestFile << objTestFile
<< cppClassesFilter << cppClassesFilter
<< classMatcherCreator
<< "M" << "M"
<< ResultDataList{ << ResultDataList{
ResultData("MyClass", objTestFileShort), ResultData("MyClass", objTestFileShort),
@@ -290,6 +319,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-ObjC") QTest::newRow("CppFunctionsFilter-ObjC")
<< objTestFile << objTestFile
<< cppFunctionsFilter << cppFunctionsFilter
<< functionMatcherCreator
<< "M" << "M"
<< ResultDataList{ << ResultDataList{
ResultData("anotherMethod", "MyClass (file1.mm)"), ResultData("anotherMethod", "MyClass (file1.mm)"),
@@ -389,12 +419,18 @@ void LocatorFilterTest::testFunctionsFilterHighlighting()
" ~~~ ") " ~~~ ")
}; };
CppModelManager *cppModelManager = CppModelManager::instance(); {
ILocatorFilter *filter = cppModelManager->functionsFilter(); Tests::VerifyCleanCppModelManager verify;
CppModelManager *cppModelManager = CppModelManager::instance();
ILocatorFilter *filter = cppModelManager->functionsFilter();
CppLocatorFilterTestCase(filter, {}, testFile, searchText, expectedResults);
}
Tests::VerifyCleanCppModelManager verify; {
Tests::VerifyCleanCppModelManager verify;
CppLocatorFilterTestCase(filter, testFile, searchText, expectedResults); const MatcherCreator matcherCreator = &LocatorMatcher::functionMatchers;
CppLocatorFilterTestCase(nullptr, matcherCreator(), testFile, searchText, expectedResults);
}
} }
} // namespace CppEditor::Internal } // namespace CppEditor::Internal