forked from qt-creator/qt-creator
CppTools: Move ProjectInfoGenerator tests into the plugin
Change-Id: I40d4b0b9751e77a5bb605349c86b37ad3935ca59 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -44,7 +44,6 @@ add_qtc_test(unittest GTEST
|
||||
compare-operators.h
|
||||
conditionally-disabled-tests.h
|
||||
cppprojectfilecategorizer-test.cpp
|
||||
cppprojectinfogenerator-test.cpp
|
||||
dummyclangipcclient.h
|
||||
dynamicastmatcherdiagnosticcontainer-matcher.h
|
||||
eventspy.cpp eventspy.h
|
||||
@@ -456,7 +455,6 @@ extend_qtc_test(unittest
|
||||
projectpart.cpp projectpart.h
|
||||
cppprojectfilecategorizer.cpp cppprojectfilecategorizer.h
|
||||
projectinfo.cpp projectinfo.h
|
||||
cppprojectinfogenerator.cpp cppprojectinfogenerator.cpp
|
||||
cppprojectpartchooser.cpp cppprojectpartchooser.h
|
||||
headerpathfilter.cpp headerpathfilter.h
|
||||
)
|
||||
|
@@ -1,177 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "googletest.h"
|
||||
#include "gtest-qt-printing.h"
|
||||
#include "mimedatabase-utilities.h"
|
||||
|
||||
#include <cpptools/cppprojectinfogenerator.h>
|
||||
#include <cpptools/projectinfo.h>
|
||||
|
||||
#include <utils/mimetypes/mimedatabase.h>
|
||||
|
||||
using CppTools::Internal::ProjectInfoGenerator;
|
||||
using CppTools::ProjectFile;
|
||||
using CppTools::ProjectInfo;
|
||||
using CppTools::ProjectPart;
|
||||
|
||||
using ProjectExplorer::Macros;
|
||||
using ProjectExplorer::ProjectUpdateInfo;
|
||||
using ProjectExplorer::RawProjectPart;
|
||||
using ProjectExplorer::ToolChain;
|
||||
|
||||
using testing::Eq;
|
||||
using testing::UnorderedElementsAre;
|
||||
using testing::PrintToString;
|
||||
|
||||
namespace {
|
||||
|
||||
MATCHER_P2(IsProjectPart, languageVersion, fileKind,
|
||||
std::string(negation ? "isn't" : "is")
|
||||
+ " project part with language version " + PrintToString(languageVersion)
|
||||
+ " and file kind " + PrintToString(fileKind))
|
||||
{
|
||||
const ProjectPart::Ptr &projectPart = arg;
|
||||
|
||||
return projectPart->languageVersion == languageVersion
|
||||
&& projectPart->files.at(0).kind == fileKind;
|
||||
}
|
||||
|
||||
class ProjectInfoGenerator : public ::testing::Test
|
||||
{
|
||||
protected:
|
||||
void SetUp() override;
|
||||
ProjectInfo generate();
|
||||
|
||||
protected:
|
||||
ProjectUpdateInfo projectUpdateInfo;
|
||||
RawProjectPart rawProjectPart;
|
||||
};
|
||||
|
||||
TEST_F(ProjectInfoGenerator, CreateNoProjectPartsForEmptyFileList)
|
||||
{
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_TRUE(projectInfo.projectParts().isEmpty());
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, CreateSingleProjectPart)
|
||||
{
|
||||
rawProjectPart.files = QStringList{ "foo.cpp", "foo.h"};
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts().size(), Eq(1));
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, CreateMultipleProjectParts)
|
||||
{
|
||||
rawProjectPart.files = QStringList{ "foo.cpp", "foo.h", "bar.c", "bar.h" };
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts().size(), Eq(2));
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, ProjectPartIndicatesObjectiveCExtensionsByDefault)
|
||||
{
|
||||
rawProjectPart.files = QStringList{ "foo.mm" };
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts().size(), Eq(1));
|
||||
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
|
||||
ASSERT_TRUE(projectPart.languageExtensions & Utils::LanguageExtension::ObjectiveC);
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, ProjectPartHasLatestLanguageVersionByDefault)
|
||||
{
|
||||
rawProjectPart.files = QStringList{ "foo.cpp" };
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts().size(), Eq(1));
|
||||
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
|
||||
ASSERT_THAT(projectPart.languageVersion, Eq(Utils::LanguageVersion::LatestCxx));
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, UseMacroInspectionReportForLanguageVersion)
|
||||
{
|
||||
projectUpdateInfo.cxxToolChainInfo.macroInspectionRunner = [](const QStringList &) {
|
||||
return ToolChain::MacroInspectionReport{Macros(), Utils::LanguageVersion::CXX17};
|
||||
};
|
||||
rawProjectPart.files = QStringList{ "foo.cpp" };
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts().size(), Eq(1));
|
||||
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
|
||||
ASSERT_THAT(projectPart.languageVersion, Eq(Utils::LanguageVersion::CXX17));
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, UseCompilerFlagsForLanguageExtensions)
|
||||
{
|
||||
rawProjectPart.files = QStringList{ "foo.cpp" };
|
||||
rawProjectPart.flagsForCxx.languageExtensions = Utils::LanguageExtension::Microsoft;
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts().size(), Eq(1));
|
||||
const ProjectPart &projectPart = *projectInfo.projectParts().at(0);
|
||||
ASSERT_TRUE(projectPart.languageExtensions & Utils::LanguageExtension::Microsoft);
|
||||
}
|
||||
|
||||
TEST_F(ProjectInfoGenerator, ProjectFileKindsMatchProjectPartVersion)
|
||||
{
|
||||
rawProjectPart.files = QStringList{ "foo.h" };
|
||||
|
||||
const ProjectInfo projectInfo = generate();
|
||||
|
||||
ASSERT_THAT(projectInfo.projectParts(),
|
||||
UnorderedElementsAre(IsProjectPart(Utils::LanguageVersion::LatestC, ProjectFile::CHeader),
|
||||
IsProjectPart(Utils::LanguageVersion::LatestC, ProjectFile::ObjCHeader),
|
||||
IsProjectPart(Utils::LanguageVersion::LatestCxx, ProjectFile::CXXHeader),
|
||||
IsProjectPart(Utils::LanguageVersion::LatestCxx, ProjectFile::ObjCXXHeader)));
|
||||
}
|
||||
|
||||
void ProjectInfoGenerator::SetUp()
|
||||
{
|
||||
ASSERT_TRUE(MimeDataBaseUtilities::addCppToolsMimeTypes());
|
||||
}
|
||||
|
||||
ProjectInfo ProjectInfoGenerator::generate()
|
||||
{
|
||||
QFutureInterface<ProjectInfo> fi;
|
||||
ProjectExplorer::ConcreteToolChain aToolChain;
|
||||
|
||||
projectUpdateInfo.rawProjectParts += rawProjectPart;
|
||||
projectUpdateInfo.cxxToolChain = &aToolChain;
|
||||
projectUpdateInfo.cToolChain = &aToolChain;
|
||||
::ProjectInfoGenerator generator(fi, projectUpdateInfo);
|
||||
|
||||
return generator.generate();
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
@@ -66,7 +66,6 @@ SOURCES += \
|
||||
clientserverinprocess-test.cpp \
|
||||
clientserveroutsideprocess-test.cpp \
|
||||
cppprojectfilecategorizer-test.cpp \
|
||||
cppprojectinfogenerator-test.cpp \
|
||||
fakeprocess.cpp \
|
||||
gtest-creator-printing.cpp \
|
||||
gtest-qt-printing.cpp \
|
||||
|
@@ -175,7 +175,6 @@ Project {
|
||||
"compilationdatabaseutils-test.cpp",
|
||||
"conditionally-disabled-tests.h",
|
||||
"cppprojectfilecategorizer-test.cpp",
|
||||
"cppprojectinfogenerator-test.cpp",
|
||||
"createtablesqlstatementbuilder-test.cpp",
|
||||
"dummyclangipcclient.h",
|
||||
"dynamicastmatcherdiagnosticcontainer-matcher.h",
|
||||
@@ -488,7 +487,6 @@ Project {
|
||||
"cppprojectfile.h",
|
||||
"cppprojectfilecategorizer.cpp",
|
||||
"cppprojectfilecategorizer.h",
|
||||
"cppprojectinfogenerator.cpp",
|
||||
"cppprojectpartchooser.cpp",
|
||||
"cppprojectpartchooser.h",
|
||||
"headerpathfilter.cpp",
|
||||
|
Reference in New Issue
Block a user