summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppsourceprocessor_test.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-12-05 11:56:06 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-12-15 15:37:36 +0100
commite3977de08eb5577222f01a9013185b036dee4564 (patch)
treebc58bd81c04272fe403c341bad59d4aa1718c8f7 /src/plugins/cpptools/cppsourceprocessor_test.cpp
parentb18c0f6af5d97f1fbf999096a44c63704f3a5d3d (diff)
downloadqt-creator-e3977de08eb5577222f01a9013185b036dee4564.tar.gz
C++: Finish gcc's include_next support
This implements the actual include_next logic and thus completes commit b934cc1 C++: pass #include_next down to CppPreprocessor::tryIncludeFile commmit 140b502 C++: Highlight argument to gcc's #include_next extension Based on https://gcc.gnu.org/onlinedocs/cpp/Wrapper-Headers.html Task-number: QTCREATORBUG-10225 Change-Id: I7eef7f5ea64a114f6d092304d32b72c55c2ce134 Reviewed-by: hjk <hjk121@nokiamail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/cppsourceprocessor_test.cpp')
-rw-r--r--src/plugins/cpptools/cppsourceprocessor_test.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppsourceprocessor_test.cpp b/src/plugins/cpptools/cppsourceprocessor_test.cpp
index 70a98bed2c..624f730d68 100644
--- a/src/plugins/cpptools/cppsourceprocessor_test.cpp
+++ b/src/plugins/cpptools/cppsourceprocessor_test.cpp
@@ -37,6 +37,7 @@
#include "cpptoolstestcase.h"
#include "editordocumenthandle.h"
+#include <coreplugin/testdatadir.h>
#include <texteditor/texteditor.h>
#include <cplusplus/CppDocument.h>
@@ -203,3 +204,38 @@ void CppToolsPlugin::test_cppsourceprocessor_macroUses()
QCOMPARE(macroUse.utf16charsEnd(), 35U);
QCOMPARE(macroUse.beginLine(), 2U);
}
+
+static bool isMacroDefinedInDocument(const QByteArray &macroName, const Document::Ptr &document)
+{
+ foreach (const Macro &macro, document->definedMacros()) {
+ if (macro.name() == macroName)
+ return true;
+ }
+
+ return false;
+}
+
+static inline QString _(const QByteArray &ba) { return QString::fromLatin1(ba, ba.size()); }
+
+void CppToolsPlugin::test_cppsourceprocessor_includeNext()
+{
+ const Core::Tests::TestDataDir data(
+ _(SRCDIR "/../../../tests/auto/cplusplus/preprocessor/data/include_next-data/"));
+ const QString mainFilePath = data.file(QLatin1String("main.cpp"));
+ const QString customHeaderPath = data.directory(QLatin1String("customIncludePath"));
+ const QString systemHeaderPath = data.directory(QLatin1String("systemIncludePath"));
+
+ CppSourceProcessor::DocumentCallback documentCallback = [](const CPlusPlus::Document::Ptr &){};
+ CppSourceProcessor sourceProcessor(Snapshot(), documentCallback);
+ ProjectPart::HeaderPaths headerPaths = ProjectPart::HeaderPaths()
+ << ProjectPart::HeaderPath(customHeaderPath, ProjectPart::HeaderPath::IncludePath)
+ << ProjectPart::HeaderPath(systemHeaderPath, ProjectPart::HeaderPath::IncludePath);
+ sourceProcessor.setHeaderPaths(headerPaths);
+
+ sourceProcessor.run(mainFilePath);
+ const Snapshot snapshot = sourceProcessor.snapshot();
+ QVERIFY(!snapshot.isEmpty());
+ const Document::Ptr mainDocument = snapshot.document(mainFilePath);
+ QVERIFY(mainDocument);
+ QVERIFY(isMacroDefinedInDocument("OK_FEATURE_X_ENABLED", mainDocument));
+}