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 "cppcurrentdocumentfilter.h"
#include "cpplocatorfilter.h"
#include "cppmodelmanager.h"
#include "cpptoolstestcase.h"
@@ -37,6 +35,7 @@ class CppLocatorFilterTestCase
{
public:
CppLocatorFilterTestCase(ILocatorFilter *filter,
const QList<LocatorMatcherTask> &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<LocatorFilterEntry> 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<QList<LocatorMatcherTask>()>;
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<QString>("testFile");
QTest::addColumn<ILocatorFilter *>("filter");
QTest::addColumn<MatcherCreator>("matcherCreator");
QTest::addColumn<QString>("searchText");
QTest::addColumn<ResultDataList>("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", "<anonymous namespace>"),
@@ -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