diff options
| author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-12-02 12:11:05 +0100 |
|---|---|---|
| committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-12-03 10:53:39 +0100 |
| commit | cb0d13692657d171e031d48c2879f8d8ce8e0e6a (patch) | |
| tree | 263ef82a51f3d64bdbbe9bbcfdf852db4f7353e3 /src/plugins/cpptools/cppmodelmanager_test.cpp | |
| parent | 9cd552a1656c04c1f3ccc92fefc62e2bd36fad37 (diff) | |
| download | qt-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.cpp | 63 |
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 { |
