Commit 746da715 authored by Nikolai Kosjar's avatar Nikolai Kosjar

CppEditor/CppTools: Avoid triggering garbage collector on editor close in tests

Closing an editor might trigger a timer which leads to the invocation of
the garbage collector. This is unfavourable for the plugin tests since a
test function closing an editor might influence a subsequent test
function (e.g. files get removed from the global snapshot although they
were added shortly before).

Change-Id: Ia80c11f99e2437fe145dc2d983b21962539b5181
Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent 0bd59178
......@@ -126,7 +126,7 @@ private:
void doAfterLocatorRun()
{
EditorManager::closeEditor(m_editor, /*askAboutModifiedEditors=*/ false);
QVERIFY(closeEditorWithoutGarbageCollectorInvocation(m_editor));
QCoreApplication::processEvents();
QVERIFY(EditorManager::documentModel()->openedDocuments().isEmpty());
QVERIFY(garbageCollectGlobalSnapshot());
......
......@@ -846,7 +846,8 @@ void CppModelManager::onProjectAdded(ProjectExplorer::Project *)
void CppModelManager::delayedGC()
{
m_delayedGcTimer->start(500);
if (m_enableGC)
m_delayedGcTimer->start(500);
}
void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project)
......@@ -992,6 +993,12 @@ CppIndexingSupport *CppModelManager::indexingSupport()
return m_indexingSupporter ? m_indexingSupporter : m_internalIndexingSupport;
}
void CppModelManager::enableGarbageCollector(bool enable)
{
m_delayedGcTimer->stop();
m_enableGC = enable;
}
void CppModelManager::setExtraDiagnostics(const QString &fileName,
const QString &kind,
const QList<Document::DiagnosticMessage> &diagnostics)
......
......@@ -152,6 +152,8 @@ public:
return m_definedMacros;
}
void enableGarbageCollector(bool enable);
static QStringList timeStampModifiedFiles(const QList<Document::Ptr> documentsToCheck);
signals:
......
......@@ -771,8 +771,9 @@ struct EditorCloser {
EditorCloser(Core::IEditor *editor): editor(editor) {}
~EditorCloser()
{
using namespace CppTools;
if (editor)
Core::EditorManager::closeEditor(editor);
QVERIFY(Tests::TestCase::closeEditorWithoutGarbageCollectorInvocation(editor));
}
};
......
......@@ -269,6 +269,7 @@ public:
virtual CppIndexingSupport *indexingSupport() = 0;
virtual void setIncludePaths(const QStringList &includePaths) = 0;
virtual void enableGarbageCollector(bool enable) = 0;
signals:
/// Project data might be locked while this is emitted.
......
......@@ -36,6 +36,14 @@
#include <QtTest>
static bool closeEditorsWithoutGarbageCollectorInvocation(const QList<Core::IEditor *> &editors)
{
CppTools::CppModelManagerInterface::instance()->enableGarbageCollector(false);
const bool closeEditorsSucceeded = Core::EditorManager::closeEditors(editors, false);
CppTools::CppModelManagerInterface::instance()->enableGarbageCollector(true);
return closeEditorsSucceeded;
}
static bool snapshotContains(const CPlusPlus::Snapshot &snapshot, const QStringList &filePaths)
{
foreach (const QString &filePath, filePaths) {
......@@ -80,7 +88,7 @@ TestCase::TestCase(bool runGarbageCollector)
TestCase::~TestCase()
{
QVERIFY(Core::EditorManager::closeEditors(m_editorsToClose, false));
QVERIFY(closeEditorsWithoutGarbageCollectorInvocation(m_editorsToClose));
QCoreApplication::processEvents();
if (m_runGarbageCollector)
......@@ -130,6 +138,11 @@ void TestCase::closeEditorAtEndOfTestCase(Core::IEditor *editor)
m_editorsToClose.append(editor);
}
bool TestCase::closeEditorWithoutGarbageCollectorInvocation(Core::IEditor *editor)
{
return closeEditorsWithoutGarbageCollectorInvocation(QList<Core::IEditor *>() << editor);
}
CPlusPlus::Document::Ptr TestCase::waitForFileInGlobalSnapshot(const QString &filePath)
{
return waitForFilesInGlobalSnapshot(QStringList(filePath)).first();
......
......@@ -73,6 +73,8 @@ public:
bool succeededSoFar() const;
void closeEditorAtEndOfTestCase(Core::IEditor *editor);
static bool closeEditorWithoutGarbageCollectorInvocation(Core::IEditor *editor);
static bool parseFiles(const QString &filePath);
static bool parseFiles(const QStringList &filePaths);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment