diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2012-12-20 15:53:12 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-01-24 11:36:22 +0100 |
commit | fa7ab13f300b49122f3f951c8995ec88041f1ddb (patch) | |
tree | 2bf01c09c082c470f582f373d7a21092cd541d8a | |
parent | fcf586974f7bb1b058d5651ba1143f131f1c8d4a (diff) | |
download | qt-creator-fa7ab13f300b49122f3f951c8995ec88041f1ddb.tar.gz |
C++: test for walking includes in frameworks.
Change-Id: Id31ce6b40d72351cfaefa5035469b87662526853
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
14 files changed, 101 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp index 51cc82f5ed..bc786e8bdb 100644 --- a/src/plugins/cpptools/cppmodelmanager_test.cpp +++ b/src/plugins/cpptools/cppmodelmanager_test.cpp @@ -28,6 +28,7 @@ ****************************************************************************/ #include "cpptoolsplugin.h" +#include "CppDocument.h" #include "cppmodelmanager.h" #include "modelmanagertesthelper.h" @@ -36,6 +37,7 @@ using namespace CppTools::Internal; +typedef CPlusPlus::Document Document; typedef CPlusPlus::CppModelManagerInterface::ProjectInfo ProjectInfo; typedef CPlusPlus::CppModelManagerInterface::ProjectPart ProjectPart; typedef ProjectExplorer::Project Project; @@ -61,6 +63,11 @@ QString testFrameworksDir(bool cleaned = true) { return testDataDir(QLatin1String("frameworks"), cleaned); } + +QString testSource(const QString &fileName) +{ + return testDataDir(QLatin1String("sources")) + fileName; +} } // anonymous namespace void CppToolsPlugin::test_modelmanager_paths() @@ -90,3 +97,42 @@ void CppToolsPlugin::test_modelmanager_paths() QCOMPARE(frameworkPaths.size(), 1); QVERIFY(frameworkPaths.contains(testFrameworksDir())); } + +void CppToolsPlugin::test_modelmanager_framework_headers() +{ + ModelManagerTestHelper helper; + CppModelManager *mm = CppModelManager::instance(); + + Project *project = helper.createProject(QLatin1String("test_modelmanager_framework_headers")); + ProjectInfo pi = mm->projectInfo(project); + QCOMPARE(pi.project().data(), project); + + ProjectPart::Ptr part(new ProjectPart); + pi.appendProjectPart(part); + part->language = ProjectPart::CXX; + part->qtVersion = ProjectPart::Qt5; + part->defines = QByteArray("#define OH_BEHAVE -1\n"); + part->includePaths << testIncludeDir(); + part->frameworkPaths << testFrameworksDir(); + part->sourceFiles << testSource(QLatin1String("test_modelmanager_framework_headers.cpp")); + + mm->updateProjectInfo(pi); + mm->updateSourceFiles(part->sourceFiles).waitForFinished(); + QCoreApplication::processEvents(); + + QVERIFY(mm->snapshot().contains(part->sourceFiles.first())); + Document::Ptr doc = mm->snapshot().document(part->sourceFiles.first()); + QVERIFY(!doc.isNull()); + CPlusPlus::Namespace *ns = doc->globalNamespace(); + QVERIFY(ns); + QVERIFY(ns->memberCount() > 0); + for (unsigned i = 0, ei = ns->memberCount(); i < ei; ++i) { + CPlusPlus::Symbol *s = ns->memberAt(i); + QVERIFY(s); + QVERIFY(s->name()); + const CPlusPlus::Identifier *id = s->name()->asNameId(); + QVERIFY(id); + QByteArray chars = id->chars(); + QVERIFY(chars.startsWith("success")); + } +} diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 29dd1c8781..903213d26f 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -115,6 +115,7 @@ private slots: void test_completion_instantiate_nested_of_nested_class_when_enclosing_is_template(); void test_modelmanager_paths(); + void test_modelmanager_framework_headers(); private: void test_completion(); diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Frameworks b/tests/cppmodelmanager/testdata/frameworks/My.framework/Frameworks new file mode 120000 index 0000000000..dc3d02e21f --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Frameworks @@ -0,0 +1 @@ +Versions/A/Frameworks
\ No newline at end of file diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Headers b/tests/cppmodelmanager/testdata/frameworks/My.framework/Headers new file mode 120000 index 0000000000..d5ab97c5c7 --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Headers @@ -0,0 +1 @@ +Versions/A/Headers
\ No newline at end of file diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Headers b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Headers new file mode 120000 index 0000000000..a177d2a6b9 --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers
\ No newline at end of file diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/A/Headers/IncorrectVersion.h b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/A/Headers/IncorrectVersion.h new file mode 100644 index 0000000000..8034d179c6 --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/A/Headers/IncorrectVersion.h @@ -0,0 +1,4 @@ +#ifndef IncorrectVersion_h +#define IncorrectVersion_h + +#endif // IncorrectVersion_h diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/A/Headers/Nested.h b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/A/Headers/Nested.h new file mode 100644 index 0000000000..fc0234ab64 --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/A/Headers/Nested.h @@ -0,0 +1,6 @@ +#ifndef Nested_h +#define Nested_h + +#include "IncorrectVersion.h" + +#endif // Nested_h diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/B/Headers/CorrectVersion.h b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/B/Headers/CorrectVersion.h new file mode 100644 index 0000000000..c4df20a40a --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/B/Headers/CorrectVersion.h @@ -0,0 +1,4 @@ +#ifndef CorrectVersion_h +#define CorrectVersion_h + +#endif // CorrectVersion_h diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/B/Headers/Nested.h b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/B/Headers/Nested.h new file mode 100644 index 0000000000..79067d54e1 --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/B/Headers/Nested.h @@ -0,0 +1,6 @@ +#ifndef Nested_h +#define Nested_h + +#include "CorrectVersion.h" + +#endif // Nested_h diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/Current b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/Current new file mode 120000 index 0000000000..7371f47a6f --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Frameworks/Nested.framework/Versions/Current @@ -0,0 +1 @@ +B
\ No newline at end of file diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Headers/MyHeader.h b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Headers/MyHeader.h new file mode 100644 index 0000000000..8ca3e6e88c --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/A/Headers/MyHeader.h @@ -0,0 +1,6 @@ +#ifndef MyHeader_h +#define MyHeader_h + +#include <Nested/Nested.h> + +#endif // MyHeader_h diff --git a/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/Current b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/Current new file mode 120000 index 0000000000..8c7e5a667f --- /dev/null +++ b/tests/cppmodelmanager/testdata/frameworks/My.framework/Versions/Current @@ -0,0 +1 @@ +A
\ No newline at end of file diff --git a/tests/cppmodelmanager/testdata/include/header.h b/tests/cppmodelmanager/testdata/include/header.h new file mode 100644 index 0000000000..689ec03871 --- /dev/null +++ b/tests/cppmodelmanager/testdata/include/header.h @@ -0,0 +1,4 @@ +#ifndef HEADER_H +#define HEADER_H + +#endif // HEADER_H diff --git a/tests/cppmodelmanager/testdata/sources/test_modelmanager_framework_headers.cpp b/tests/cppmodelmanager/testdata/sources/test_modelmanager_framework_headers.cpp new file mode 100644 index 0000000000..27a6b5e518 --- /dev/null +++ b/tests/cppmodelmanager/testdata/sources/test_modelmanager_framework_headers.cpp @@ -0,0 +1,19 @@ +#include <My/MyHeader.h> + +#ifndef MyHeader_h +bool failure_MyHeader_not_included; +#endif + +#ifndef Nested_h +bool failure_Nested_header_not_included; +#endif + +#ifdef IncorrectVersion_h +bool failure_Incorrect_version_of_nested_header_included; +#endif + +#ifdef CorrectVersion_h +bool success_is_the_only_option; +#endif + + |