diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-06-05 13:05:47 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-06-08 06:32:40 +0000 |
commit | cbd4d05423da34891abba5e0c7b51b646f3aa101 (patch) | |
tree | cc701c570740451dde8423151b8518b3bd86aa86 /tests | |
parent | b30926cea4d6698b7ce4793799ab155f6434b8d2 (diff) | |
download | qt-creator-cbd4d05423da34891abba5e0c7b51b646f3aa101.tar.gz |
Clang: Fix processing documents if multiple are opened at once
Reproducable with
1. $ ./qtcreator a.cpp b.cpp
2. Switch to a.cpp => no highlighting
Because ClangEditorDocumentProcessor does asynchronous processing, the
backend might receive a DocumentsOpenedMessage where the document is not
the current editor (happens for a.cpp in the example). When switching to
that document, the initial jobs were not processed as the document was
not dirty.
Address this case by also checking for documents that have a revision of
1 and are not dirty. Unify adding the annotations jobs to ensure that
not more than needed are run.
Change-Id: I14030260842f97d58280235e763c8d7490705f8d
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/unittest/clangcodemodelserver-test.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tests/unit/unittest/clangcodemodelserver-test.cpp b/tests/unit/unittest/clangcodemodelserver-test.cpp index ea4238975e..bde56e2160 100644 --- a/tests/unit/unittest/clangcodemodelserver-test.cpp +++ b/tests/unit/unittest/clangcodemodelserver-test.cpp @@ -258,6 +258,21 @@ TEST_F(ClangCodeModelServerSlowTest, NoInitialAnnotationsForClosedDocument) closeDocument(filePathA); } +TEST_F(ClangCodeModelServerSlowTest, AnnotationsForInitiallyNotVisibleDocument) +{ + const int expectedAnnotationsCount = 2; + updateProjectPart(); + updateVisibilty(filePathA, filePathA); + expectAnnotations(expectedAnnotationsCount); + clangServer.documentsOpened( // Open document while another is still visible + DocumentsOpenedMessage({FileContainer(filePathB, projectPartId, Utf8String(), false, 1)}, + filePathA, {filePathA})); + clangServer.unsavedFilesUpdated( // Invalidate added jobs + UnsavedFilesUpdatedMessage({FileContainer(Utf8StringLiteral("aFile"), Utf8String())})); + + updateVisibilty(filePathB, filePathB); +} + TEST_F(ClangCodeModelServerSlowTest, NoAnnotationsForClosedDocument) { const int expectedAnnotationsCount = AnnotationJobsMultiplier; // Only for registration. |