aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-07-14 14:44:08 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2021-07-16 12:09:48 +0000
commit5ec52eef31484a7ae5bbad0fb3f4d595e6c67b1b (patch)
tree7ff4ab3362f1c5fa8397f516bcc16d062fbf520d /src/plugins/cpptools
parent13e8a9a13682ad8502ae8053f26a014d66570bf8 (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.h9
-rw-r--r--src/plugins/cpptools/cpptoolsunittestfiles.pri2
-rw-r--r--src/plugins/cpptools/projectinfo_test.cpp149
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