File indexing completed on 2024-05-12 04:39:41
0001 /* 0002 SPDX-FileCopyrightText: 2010 Andreas Pakulat <apaku@gmx.de> 0003 SPDX-FileCopyrightText: 2014 Sergey Kalinichev <kalinichev.so.0@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-or-later 0006 */ 0007 0008 #include "test_definesandincludes.h" 0009 0010 #include <QTest> 0011 0012 #include <interfaces/iproject.h> 0013 #include <interfaces/iprojectcontroller.h> 0014 #include <project/projectmodel.h> 0015 #include <tests/autotestshell.h> 0016 #include <tests/testcore.h> 0017 #include <tests/testhelpers.h> 0018 #include <tests/projectsgenerator.h> 0019 0020 #include "idefinesandincludesmanager.h" 0021 0022 using namespace KDevelop; 0023 0024 void TestDefinesAndIncludes::cleanupTestCase() 0025 { 0026 TestCore::shutdown(); 0027 } 0028 0029 void TestDefinesAndIncludes::initTestCase() 0030 { 0031 AutoTestShell::init({QStringLiteral("kdevdefinesandincludesmanager"), QStringLiteral("KDevCustomBuildSystem"), QStringLiteral("KDevStandardOutputView")}); 0032 TestCore::initialize(); 0033 } 0034 0035 void TestDefinesAndIncludes::cleanup() 0036 { 0037 ICore::self()->projectController()->closeProject( m_currentProject ); 0038 } 0039 0040 void TestDefinesAndIncludes::loadSimpleProject() 0041 { 0042 m_currentProject = ProjectsGenerator::GenerateSimpleProject(); 0043 QVERIFY( m_currentProject ); 0044 0045 auto manager = IDefinesAndIncludesManager::manager(); 0046 QVERIFY( manager ); 0047 const auto actualIncludes = manager->includes( m_currentProject->projectItem(), IDefinesAndIncludesManager::UserDefined ); 0048 const auto actualDefines = manager->defines( m_currentProject->projectItem(), IDefinesAndIncludesManager::UserDefined ); 0049 0050 qDebug() << actualDefines << actualIncludes; 0051 0052 QCOMPARE( actualIncludes, Path::List() << Path( QDir::rootPath() + QStringLiteral("usr/include/mydir") ) ); 0053 0054 Defines defines; 0055 defines.insert( QStringLiteral("_DEBUG"), QString() ); 0056 defines.insert( QStringLiteral("VARIABLE"), QStringLiteral("VALUE") ); 0057 QCOMPARE( actualDefines, defines ); 0058 0059 QVERIFY(!manager->parserArguments(m_currentProject->path().path() + "/src/main.cpp").isEmpty()); 0060 } 0061 0062 void TestDefinesAndIncludes::loadMultiPathProject() 0063 { 0064 m_currentProject = ProjectsGenerator::GenerateMultiPathProject(); 0065 QVERIFY( m_currentProject ); 0066 0067 auto manager = IDefinesAndIncludesManager::manager(); 0068 QVERIFY( manager ); 0069 Path::List includes = Path::List() << Path( QDir::rootPath() + QStringLiteral("usr/include/otherdir") ); 0070 0071 QHash<QString,QString> defines; 0072 defines.insert(QStringLiteral("SOURCE"), QStringLiteral("CONTENT")); 0073 defines.insert(QStringLiteral("_COPY"), QString()); 0074 0075 QCOMPARE( manager->includes( m_currentProject->projectItem(), IDefinesAndIncludesManager::UserDefined ), includes ); 0076 QCOMPARE( manager->defines( m_currentProject->projectItem(), IDefinesAndIncludesManager::UserDefined ), defines ); 0077 0078 ProjectBaseItem* mainfile = nullptr; 0079 const auto& fileSet = m_currentProject->fileSet(); 0080 for (const auto& file : fileSet) { 0081 const auto& files = m_currentProject->filesForPath(file); 0082 for (auto i: files) { 0083 if( i->text() == QLatin1String("main.cpp") ) { 0084 mainfile = i; 0085 break; 0086 } 0087 } 0088 } 0089 QVERIFY(mainfile); 0090 0091 includes.prepend(Path(QDir::rootPath() + QStringLiteral("usr/local/include/mydir"))); 0092 defines.insert(QStringLiteral("BUILD"), QStringLiteral("debug")); 0093 qDebug() << includes << "VS" << manager->includes( mainfile, IDefinesAndIncludesManager::UserDefined ); 0094 qDebug() << mainfile << mainfile->path(); 0095 QCOMPARE(manager->includes( mainfile, IDefinesAndIncludesManager::UserDefined ), includes); 0096 QCOMPARE(defines, manager->defines( mainfile, IDefinesAndIncludesManager::UserDefined )); 0097 QVERIFY(!manager->parserArguments(mainfile).isEmpty()); 0098 } 0099 0100 void TestDefinesAndIncludes::testNoProjectIncludeDirectories() 0101 { 0102 m_currentProject = ProjectsGenerator::GenerateSimpleProjectWithOutOfProjectFiles(); 0103 QVERIFY(m_currentProject); 0104 0105 auto manager = KDevelop::IDefinesAndIncludesManager::manager(); 0106 QVERIFY(manager); 0107 0108 auto projectIncludes = manager->includes(m_currentProject->projectItem(), IDefinesAndIncludesManager::UserDefined); 0109 0110 Path includePath1(m_currentProject->path().path() + QDir::separator() + "include1.h"); 0111 Path includePath2(m_currentProject->path().path() + QDir::separator() + "include2.h"); 0112 0113 QVERIFY(!projectIncludes.contains(includePath1)); 0114 QVERIFY(!projectIncludes.contains(includePath2)); 0115 0116 auto noProjectIncludes = manager->includes(m_currentProject->path().path() + "/src/main.cpp"); 0117 QVERIFY(noProjectIncludes.contains(includePath1)); 0118 QVERIFY(noProjectIncludes.contains(includePath2)); 0119 } 0120 0121 void TestDefinesAndIncludes::testEmptyProject() 0122 { 0123 m_currentProject = ProjectsGenerator::GenerateEmptyProject(); 0124 QVERIFY(m_currentProject); 0125 0126 auto manager = KDevelop::IDefinesAndIncludesManager::manager(); 0127 QVERIFY(manager); 0128 0129 auto projectIncludes = manager->includes(m_currentProject->projectItem()); 0130 auto projectDefines = manager->defines(m_currentProject->projectItem()); 0131 auto parserArguments = manager->parserArguments(m_currentProject->projectItem()); 0132 0133 QVERIFY(projectIncludes.isEmpty()); 0134 QVERIFY(projectDefines.isEmpty()); 0135 QVERIFY(parserArguments.isEmpty()); 0136 } 0137 0138 QTEST_MAIN(TestDefinesAndIncludes) 0139 0140 #include "moc_test_definesandincludes.cpp"