CppTools: Move ProjectInfoGenerator tests into the plugin

Change-Id: I40d4b0b9751e77a5bb605349c86b37ad3935ca59
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2021-07-14 14:44:08 +02:00
parent 13e8a9a136
commit 5ec52eef31
7 changed files with 158 additions and 184 deletions

View File

@@ -23,8 +23,13 @@
**
****************************************************************************/
#include "cppprojectinfogenerator.h"
#include "cppprojectpartchooser.h"
#include "cpptoolsplugin.h"
#include "projectinfo.h"
#include <projectexplorer/toolchainconfigwidget.h>
#include <utils/algorithm.h>
#include <QtTest>
@@ -318,5 +323,149 @@ void CppToolsPlugin::test_projectPartChooser_doNotIndicateFromDependencies()
QVERIFY(!(t.choose().hints & ProjectPartInfo::IsFromDependenciesMatch));
}
namespace {
class TestToolchain : public ProjectExplorer::ToolChain
{
public:
TestToolchain() : ProjectExplorer::ToolChain("dummy") {}
private:
MacroInspectionRunner createMacroInspectionRunner() const override { return {}; }
Utils::LanguageExtensions languageExtensions(const QStringList &) const override { return {}; }
Utils::WarningFlags warningFlags(const QStringList &) const override { return {}; }
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
const Utils::Environment &) const override { return {}; }
void addToEnvironment(Utils::Environment &) const override {}
Utils::FilePath makeCommand(const Utils::Environment &) const override { return {}; }
QList<Utils::OutputLineParser *> createOutputParsers() const override { return {}; }
std::unique_ptr<ProjectExplorer::ToolChainConfigWidget> createConfigurationWidget() override
{
return {};
};
};
class ProjectInfoGeneratorTest
{
public:
ProjectInfo generate()
{
QFutureInterface<ProjectInfo> fi;
TestToolchain aToolChain;
projectUpdateInfo.rawProjectParts += rawProjectPart;
projectUpdateInfo.cxxToolChain = &aToolChain;
projectUpdateInfo.cToolChain = &aToolChain;
ProjectInfoGenerator generator(fi, projectUpdateInfo);
return generator.generate();
}
ProjectExplorer::ProjectUpdateInfo projectUpdateInfo;
ProjectExplorer::RawProjectPart rawProjectPart;
};
}
void CppToolsPlugin::test_projectInfoGenerator_createNoProjectPartsForEmptyFileList()
{
ProjectInfoGeneratorTest t;
const ProjectInfo projectInfo = t.generate();
QVERIFY(projectInfo.projectParts().isEmpty());
}
void CppToolsPlugin::test_projectInfoGenerator_createSingleProjectPart()
{
ProjectInfoGeneratorTest t;
t.rawProjectPart.files = QStringList{ "foo.cpp", "foo.h"};
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 1);
}
void CppToolsPlugin::test_projectInfoGenerator_createMultipleProjectParts()
{
ProjectInfoGeneratorTest t;
t.rawProjectPart.files = QStringList{ "foo.cpp", "foo.h", "bar.c", "bar.h" };
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 2);
}
void CppToolsPlugin::test_projectInfoGenerator_projectPartIndicatesObjectiveCExtensionsByDefault()
{
ProjectInfoGeneratorTest t;
t.rawProjectPart.files = QStringList{ "foo.mm" };
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 1);
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
QVERIFY(projectPart.languageExtensions & Utils::LanguageExtension::ObjectiveC);
}
void CppToolsPlugin::test_projectInfoGenerator_projectPartHasLatestLanguageVersionByDefault()
{
ProjectInfoGeneratorTest t;
t.rawProjectPart.files = QStringList{ "foo.cpp" };
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 1);
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
QCOMPARE(projectPart.languageVersion, Utils::LanguageVersion::LatestCxx);
}
void CppToolsPlugin::test_projectInfoGenerator_useMacroInspectionReportForLanguageVersion()
{
ProjectInfoGeneratorTest t;
t.projectUpdateInfo.cxxToolChainInfo.macroInspectionRunner = [](const QStringList &) {
return TestToolchain::MacroInspectionReport{ProjectExplorer::Macros(),
Utils::LanguageVersion::CXX17};
};
t.rawProjectPart.files = QStringList{ "foo.cpp" };
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 1);
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
QCOMPARE(projectPart.languageVersion, Utils::LanguageVersion::CXX17);
}
void CppToolsPlugin::test_projectInfoGenerator_useCompilerFlagsForLanguageExtensions()
{
ProjectInfoGeneratorTest t;
t.rawProjectPart.files = QStringList{ "foo.cpp" };
t.rawProjectPart.flagsForCxx.languageExtensions = Utils::LanguageExtension::Microsoft;
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 1);
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
QVERIFY(projectPart.languageExtensions & Utils::LanguageExtension::Microsoft);
}
void CppToolsPlugin::test_projectInfoGenerator_projectFileKindsMatchProjectPartVersion()
{
ProjectInfoGeneratorTest t;
t.rawProjectPart.files = QStringList{ "foo.h" };
const ProjectInfo projectInfo = t.generate();
QCOMPARE(projectInfo.projectParts().size(), 4);
QVERIFY(Utils::contains(projectInfo.projectParts(), [](const ProjectPart::Ptr &p) {
return p->languageVersion == Utils::LanguageVersion::LatestC
&& p->files.first().kind == ProjectFile::CHeader;
}));
QVERIFY(Utils::contains(projectInfo.projectParts(), [](const ProjectPart::Ptr &p) {
return p->languageVersion == Utils::LanguageVersion::LatestC
&& p->files.first().kind == ProjectFile::ObjCHeader;
}));
QVERIFY(Utils::contains(projectInfo.projectParts(), [](const ProjectPart::Ptr &p) {
return p->languageVersion == Utils::LanguageVersion::LatestCxx
&& p->files.first().kind == ProjectFile::CXXHeader;
}));
QVERIFY(Utils::contains(projectInfo.projectParts(), [](const ProjectPart::Ptr &p) {
return p->languageVersion == Utils::LanguageVersion::LatestCxx
&& p->files.first().kind == ProjectFile::ObjCXXHeader;
}));
}
} // namespace Internal
} // namespace CppTools