summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager_test.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-12-02 12:11:05 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-12-03 10:53:39 +0100
commitcb0d13692657d171e031d48c2879f8d8ce8e0e6a (patch)
tree263ef82a51f3d64bdbbe9bbcfdf852db4f7353e3 /src/plugins/cpptools/cppmodelmanager_test.cpp
parent9cd552a1656c04c1f3ccc92fefc62e2bd36fad37 (diff)
downloadqt-creator-cb0d13692657d171e031d48c2879f8d8ce8e0e6a.tar.gz
CppTools: Update document on activation
...if the project was updated in the meanwhile. If a project is updated mark invisible editor documents dirty and update them if they get focus. This also fixes document highlighting when restoring a session for documents that the user "switched away" before the project info is pushed to CppModelManager. This completes CppTools: Update visible documents on project update commit c2eb91e053332d010adc8b9e7918d9de28ef4c90 which only takes care of visible documents. Task-number: QTCREATORBUG-13270 Change-Id: Id445e7f509deac5d03194aecc54ce4629b7926ce Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager_test.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index b4065f1328..0e7b35f364 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -1037,6 +1037,69 @@ void CppToolsPlugin::test_modelmanager_defines_per_editor()
}
}
+void CppToolsPlugin::test_modelmanager_updateEditorsAfterProjectUpdate()
+{
+ ModelManagerTestHelper helper;
+ CppModelManager *mm = CppModelManager::instance();
+
+ MyTestDataDir testDataDirectory(_("testdata_defines"));
+ const QString fileA = testDataDirectory.file(_("main1.cpp")); // content not relevant
+ const QString fileB = testDataDirectory.file(_("main2.cpp")); // content not relevant
+
+ // Open file A in editor
+ Core::IEditor *editorA = Core::EditorManager::openEditor(fileA);
+ QVERIFY(editorA);
+ EditorCloser closerA(editorA);
+ QCOMPARE(Core::DocumentModel::openedDocuments().size(), 1);
+
+ EditorDocumentHandle *editorDocumentA = mm->editorDocument(fileA);
+ QVERIFY(editorDocumentA);
+ ProjectPart::Ptr documentAProjectPart = editorDocumentA->processor()->parser()->projectPart();
+ QVERIFY(!documentAProjectPart->project);
+
+ // Open file B in editor
+ Core::IEditor *editorB = Core::EditorManager::openEditor(fileB);
+ QVERIFY(editorB);
+ EditorCloser closerB(editorB);
+ QCOMPARE(Core::DocumentModel::openedDocuments().size(), 2);
+
+ EditorDocumentHandle *editorDocumentB = mm->editorDocument(fileB);
+ QVERIFY(editorDocumentB);
+ ProjectPart::Ptr documentBProjectPart = editorDocumentB->processor()->parser()->projectPart();
+ QVERIFY(!documentBProjectPart->project);
+
+ // Switch back to document A
+ Core::EditorManager::activateEditor(editorA);
+
+ // Open/update related project
+ Project *project = helper.createProject(_("test_modelmanager_updateEditorsAfterProjectUpdate"));
+
+ ProjectPart::Ptr part(new ProjectPart);
+ part->project = project;
+ part->files.append(ProjectFile(fileA, ProjectFile::CXXSource));
+ part->files.append(ProjectFile(fileB, ProjectFile::CXXSource));
+ part->languageVersion = ProjectPart::CXX11;
+ part->qtVersion = ProjectPart::NoQt;
+
+ ProjectInfo pi = mm->projectInfo(project);
+ pi.appendProjectPart(part);
+ pi.finish();
+ updateProjectInfo(mm, &helper, pi);
+
+ // ... and check for updated editor document A
+ while (editorDocumentA->processor()->isParserRunning())
+ QCoreApplication::processEvents();
+ documentAProjectPart = editorDocumentA->processor()->parser()->projectPart();
+ QCOMPARE(documentAProjectPart->project, project);
+
+ // Switch back to document B and check if that's updated, too
+ Core::EditorManager::activateEditor(editorB);
+ while (editorDocumentB->processor()->isParserRunning())
+ QCoreApplication::processEvents();
+ documentBProjectPart = editorDocumentB->processor()->parser()->projectPart();
+ QCOMPARE(documentBProjectPart->project, project);
+}
+
void CppToolsPlugin::test_modelmanager_renameIncludes()
{
struct ModelManagerGCHelper {