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