summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager_test.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2013-09-30 13:36:01 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2013-10-01 13:02:45 +0200
commit507452f0971105e772e2c4913720cdd136ed2ca9 (patch)
tree230680e9d1a7c550770be5592121e71ab28aef61 /src/plugins/cpptools/cppmodelmanager_test.cpp
parent6603d9ae5fca16b0797709e9ba47bd47fd67ec3f (diff)
downloadqt-creator-507452f0971105e772e2c4913720cdd136ed2ca9.tar.gz
CppTools: honor pre-compiled headers in the code-model.
Task-number: QTCREATORBUG-476 Change-Id: I82ed92acdcda551d2c6a9ca221832ac20117a08f Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager_test.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index 17391483e0..db76d6ecc1 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -870,3 +870,103 @@ void CppToolsPlugin::test_modelmanager_defines_per_project()
QCOMPARE(decl->name()->identifier()->chars(), "two");
}
}
+
+void CppToolsPlugin::test_modelmanager_defines_per_project_pch()
+{
+ ModelManagerTestHelper helper;
+
+ MyTestDataDir testDataDirectory(QLatin1String("testdata_defines"));
+ const QString main1File = testDataDirectory.file(QLatin1String("main1.cpp"));
+ const QString main2File = testDataDirectory.file(QLatin1String("main2.cpp"));
+ const QString header = testDataDirectory.file(QLatin1String("header.h"));
+ const QString pch1File = testDataDirectory.file(QLatin1String("pch1.h"));
+ const QString pch2File = testDataDirectory.file(QLatin1String("pch2.h"));
+
+ CppModelManager *mm = CppModelManager::instance();
+
+ Project *project = helper.createProject(
+ QLatin1String("test_modelmanager_defines_per_project_pch"));
+
+ ProjectPart::Ptr part1(new ProjectPart);
+ part1->files.append(ProjectFile(main1File, ProjectFile::CXXSource));
+ part1->files.append(ProjectFile(header, ProjectFile::CXXHeader));
+ part1->cxxVersion = ProjectPart::CXX11;
+ part1->qtVersion = ProjectPart::NoQt;
+ part1->precompiledHeaders.append(pch1File);
+ part1->includePaths = QStringList() << testDataDirectory.includeDir(false);
+
+ ProjectPart::Ptr part2(new ProjectPart);
+ part2->files.append(ProjectFile(main2File, ProjectFile::CXXSource));
+ part2->files.append(ProjectFile(header, ProjectFile::CXXHeader));
+ part2->cxxVersion = ProjectPart::CXX11;
+ part2->qtVersion = ProjectPart::NoQt;
+ part2->precompiledHeaders.append(pch2File);
+ part2->includePaths = QStringList() << testDataDirectory.includeDir(false);
+
+ ProjectInfo pi = mm->projectInfo(project);
+ pi.appendProjectPart(part1);
+ pi.appendProjectPart(part2);
+
+ mm->updateProjectInfo(pi);
+
+ helper.waitForRefreshedSourceFiles();
+
+ QCOMPARE(mm->snapshot().size(), 4);
+
+ // Open a file in the editor
+ QCOMPARE(Core::EditorManager::documentModel()->openedDocuments().size(), 0);
+
+ {
+ Core::IEditor *editor = Core::EditorManager::openEditor(main1File);
+ EditorCloser closer(editor);
+ QVERIFY(editor);
+ QCOMPARE(Core::EditorManager::documentModel()->openedDocuments().size(), 1);
+ QVERIFY(mm->isCppEditor(editor));
+
+ CppEditorSupport *sup = mm->cppEditorSupport(
+ qobject_cast<TextEditor::BaseTextEditor *>(editor));
+ while (sup->lastSemanticInfoDocument().isNull())
+ QCoreApplication::processEvents();
+
+ sup->snapshotUpdater()->setUsePrecompiledHeaders(true);
+ sup->snapshotUpdater()->update(mm->workingCopy());
+
+ Document::Ptr doc = mm->snapshot().document(main1File);
+ QVERIFY(doc);
+ QVERIFY(doc->globalNamespace());
+ QCOMPARE(doc->globalSymbolCount(), 1U);
+ CPlusPlus::Symbol *s = doc->globalSymbolAt(0);
+ QVERIFY(s);
+ CPlusPlus::Declaration *decl = s->asDeclaration();
+ QVERIFY(decl);
+ QVERIFY(decl->type()->isIntegerType());
+ QCOMPARE(decl->name()->identifier()->chars(), "one");
+ }
+
+ {
+ Core::IEditor *editor = Core::EditorManager::openEditor(main2File);
+ EditorCloser closer(editor);
+ QVERIFY(editor);
+ QCOMPARE(Core::EditorManager::documentModel()->openedDocuments().size(), 1);
+ QVERIFY(mm->isCppEditor(editor));
+
+ CppEditorSupport *sup = mm->cppEditorSupport(
+ qobject_cast<TextEditor::BaseTextEditor *>(editor));
+ while (sup->lastSemanticInfoDocument().isNull())
+ QCoreApplication::processEvents();
+
+ sup->snapshotUpdater()->setUsePrecompiledHeaders(true);
+ sup->snapshotUpdater()->update(mm->workingCopy());
+
+ Document::Ptr doc = mm->snapshot().document(main2File);
+ QVERIFY(doc);
+ QVERIFY(doc->globalNamespace());
+ QCOMPARE(doc->globalSymbolCount(), 1U);
+ CPlusPlus::Symbol *s = doc->globalSymbolAt(0);
+ QVERIFY(s);
+ CPlusPlus::Declaration *decl = s->asDeclaration();
+ QVERIFY(decl);
+ QVERIFY(decl->type()->isIntegerType());
+ QCOMPARE(decl->name()->identifier()->chars(), "two");
+ }
+}