diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-07-14 14:44:08 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-07-16 12:09:48 +0000 |
commit | 5ec52eef31484a7ae5bbad0fb3f4d595e6c67b1b (patch) | |
tree | 7ff4ab3362f1c5fa8397f516bcc16d062fbf520d /src/plugins/cpptools | |
parent | 13e8a9a13682ad8502ae8053f26a014d66570bf8 (diff) |
CppTools: Move ProjectInfoGenerator tests into the plugin
Change-Id: I40d4b0b9751e77a5bb605349c86b37ad3935ca59
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r-- | src/plugins/cpptools/cpptoolsplugin.h | 9 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolsunittestfiles.pri | 2 | ||||
-rw-r--r-- | src/plugins/cpptools/projectinfo_test.cpp | 149 |
3 files changed, 158 insertions, 2 deletions
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 947d2c2d35..b819fd7559 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -232,6 +232,15 @@ private slots: void test_projectPartChooser_indicateFallbacktoProjectPartFromModelManager(); void test_projectPartChooser_indicateFromDependencies(); void test_projectPartChooser_doNotIndicateFromDependencies(); + + void test_projectInfoGenerator_createNoProjectPartsForEmptyFileList(); + void test_projectInfoGenerator_createSingleProjectPart(); + void test_projectInfoGenerator_createMultipleProjectParts(); + void test_projectInfoGenerator_projectPartIndicatesObjectiveCExtensionsByDefault(); + void test_projectInfoGenerator_projectPartHasLatestLanguageVersionByDefault(); + void test_projectInfoGenerator_useMacroInspectionReportForLanguageVersion(); + void test_projectInfoGenerator_useCompilerFlagsForLanguageExtensions(); + void test_projectInfoGenerator_projectFileKindsMatchProjectPartVersion(); #endif private: diff --git a/src/plugins/cpptools/cpptoolsunittestfiles.pri b/src/plugins/cpptools/cpptoolsunittestfiles.pri index 2c40886217..913a47e45e 100644 --- a/src/plugins/cpptools/cpptoolsunittestfiles.pri +++ b/src/plugins/cpptools/cpptoolsunittestfiles.pri @@ -10,7 +10,6 @@ HEADERS += \ $$PWD/projectpart.h \ $$PWD/cppprojectfilecategorizer.h \ $$PWD/projectinfo.h \ - $$PWD/cppprojectinfogenerator.cpp \ $$PWD/headerpathfilter.h SOURCES += \ @@ -19,5 +18,4 @@ SOURCES += \ $$PWD/projectpart.cpp \ $$PWD/cppprojectfilecategorizer.cpp \ $$PWD/projectinfo.cpp \ - $$PWD/cppprojectinfogenerator.cpp \ $$PWD/headerpathfilter.cpp diff --git a/src/plugins/cpptools/projectinfo_test.cpp b/src/plugins/cpptools/projectinfo_test.cpp index bbac13216d..04b2940e33 100644 --- a/src/plugins/cpptools/projectinfo_test.cpp +++ b/src/plugins/cpptools/projectinfo_test.cpp @@ -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 |