From 36ce1dbb84ff3fb557c781029cf5aa7e5051ea4a Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 13 Nov 2013 14:31:50 +0100 Subject: [PATCH] Designer/CppTools: Fix flaky test_gotoslot_withoutProject The document was not always updated in time. Change-Id: Iac89985d39a8784e3cbf63dfd42b1c5150775068 Reviewed-by: Christian Stenger --- src/plugins/cpptools/cppmodelmanager.cpp | 2 +- .../cpptools/cpptoolseditorsupport.cpp | 5 ++++ src/plugins/cpptools/cpptoolseditorsupport.h | 3 +++ src/plugins/designer/gotoslot_test.cpp | 24 ++++++++++++++----- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 533b8038084..4d5e8a1d9d6 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -461,7 +461,7 @@ CppEditorSupport *CppModelManager::cppEditorSupport(TextEditor::BaseTextEditor * QMutexLocker locker(&m_cppEditorSupportsMutex); CppEditorSupport *editorSupport = m_cppEditorSupports.value(textEditor, 0); - if (!editorSupport) { + if (!editorSupport && isCppEditor(textEditor)) { editorSupport = new CppEditorSupport(this, textEditor); m_cppEditorSupports.insert(textEditor, editorSupport); } diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp index e9ec1d23a09..c720b3b73ad 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.cpp +++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp @@ -308,6 +308,11 @@ void CppEditorSupport::updateDocumentNow() } } +bool CppEditorSupport::isUpdatingDocument() +{ + return m_updateDocumentTimer->isActive() || m_documentParser.isRunning(); +} + void CppEditorSupport::onDocumentUpdated(Document::Ptr doc) { if (doc.isNull()) diff --git a/src/plugins/cpptools/cpptoolseditorsupport.h b/src/plugins/cpptools/cpptoolseditorsupport.h index 02beb1d2951..84674e3e518 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.h +++ b/src/plugins/cpptools/cpptoolseditorsupport.h @@ -125,6 +125,9 @@ public: QSharedPointer snapshotUpdater(); + /// Checks whether the document is (re)parsed or about to be (re)parsed. + bool isUpdatingDocument(); + signals: void documentUpdated(); void diagnosticsChanged(); diff --git a/src/plugins/designer/gotoslot_test.cpp b/src/plugins/designer/gotoslot_test.cpp index ef9ed568280..f2789aa502d 100644 --- a/src/plugins/designer/gotoslot_test.cpp +++ b/src/plugins/designer/gotoslot_test.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -91,8 +92,13 @@ public: const QString functionName = QLatin1String("on_pushButton_clicked"); const QString qualifiedFunctionName = QLatin1String("Form::") + functionName; - foreach (const QString &file, files) - QVERIFY(EditorManager::openEditor(file)); + QList editors; + foreach (const QString &file, files) { + IEditor *editor = EditorManager::openEditor(file); + TextEditor::BaseTextEditor *e = qobject_cast(editor); + QVERIFY(e); + editors << e; + } QCOMPARE(EditorManager::documentModel()->openedDocuments().size(), files.size()); while (!m_modelManager->snapshot().contains(cppFile) || !m_modelManager->snapshot().contains(hFile)) { @@ -114,15 +120,21 @@ public: QVERIFY(integration); integration->emitNavigateToSlot(QLatin1String("pushButton"), QLatin1String("clicked()"), QStringList()); - QApplication::processEvents(); - - // Checks after - m_modelManager->updateSourceFiles(QStringList() << cppFile << hFile).waitForFinished(); QCOMPARE(EditorManager::currentDocument()->filePath(), cppFile); QVERIFY(EditorManager::currentDocument()->isModified()); + // Wait for updated documents + foreach (TextEditor::BaseTextEditor *editor, editors) { + if (CppEditorSupport *editorSupport = m_modelManager->cppEditorSupport(editor)) { + while (editorSupport->isUpdatingDocument()) + QApplication::processEvents(); + } + } + + // Checks after Document::Ptr cppDocumentAfter = m_modelManager->snapshot().document(cppFile); + QCOMPARE(cppDocumentAfter->globalSymbolCount(), 3U); QVERIFY(containsSymbol(cppDocumentAfter->globalNamespace(), qualifiedFunctionName));