diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 5557326a9a1..10b4087a432 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -237,6 +237,6 @@ else:unix { OTHER_FILES += editormanager/BinFiles.mimetypes.xml equals(TEST, 1) { - SOURCES += plugintestutils.cpp - HEADERS += plugintestutils.h + SOURCES += testdatadir.cpp + HEADERS += testdatadir.h } diff --git a/src/plugins/coreplugin/coreplugin.qbs b/src/plugins/coreplugin/coreplugin.qbs index e3ff4475452..89efd1e2483 100644 --- a/src/plugins/coreplugin/coreplugin.qbs +++ b/src/plugins/coreplugin/coreplugin.qbs @@ -181,8 +181,8 @@ QtcPlugin { name: "Tests" condition: project.testsEnabled files: [ - "plugintestutils.cpp", - "plugintestutils.h", + "testdatadir.cpp", + "testdatadir.h", ] } diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 4a9890f05ed..93a7c3c739d 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1147,7 +1147,7 @@ bool EditorManager::closeEditors(const QList &editorsToClose, bool ask emit m_instance->editorsClosed(acceptedEditors.toList()); foreach (IEditor *editor, acceptedEditors) - editor->deleteLater(); + delete editor; if (currentView && !currentViewHandled) { if (IEditor *editor = currentView->currentEditor()) diff --git a/src/plugins/coreplugin/plugintestutils.cpp b/src/plugins/coreplugin/testdatadir.cpp similarity index 70% rename from src/plugins/coreplugin/plugintestutils.cpp rename to src/plugins/coreplugin/testdatadir.cpp index 964c709ae2f..c049585f97e 100644 --- a/src/plugins/coreplugin/plugintestutils.cpp +++ b/src/plugins/coreplugin/testdatadir.cpp @@ -28,30 +28,14 @@ ****************************************************************************/ -#include "plugintestutils.h" +#include "testdatadir.h" -#include "editormanager/editormanager.h" -#include "editormanager/ieditor.h" - -#include #include #include #include #include -void Core::Tests::closeAndDeleteEditors(QList editorsToClose) -{ - EditorManager::closeEditors(editorsToClose, /*askAboutModifiedEditors=*/ false); - // The editors are going to be deleted by the event loop (deleteLater()), - // but for tests we need them deleted now. - foreach (Core::IEditor *editor, editorsToClose) - QCoreApplication::sendPostedEvents(editor, QEvent::DeferredDelete); -} - -void Core::Tests::closeAndDeleteEditor(Core::IEditor *editor) -{ - closeAndDeleteEditors(QList() << editor); -} +using namespace Core::Internal::Tests; static void maybeAppendSlash(QString *string) { @@ -60,7 +44,7 @@ static void maybeAppendSlash(QString *string) string->append(slash); } -Core::Tests::TestDataDir::TestDataDir(const QString &directory) +TestDataDir::TestDataDir(const QString &directory) : m_directory(directory) { maybeAppendSlash(&m_directory); @@ -69,12 +53,12 @@ Core::Tests::TestDataDir::TestDataDir(const QString &directory) QVERIFY(fi.isDir()); } -QString Core::Tests::TestDataDir::file(const QString &fileName) const +QString TestDataDir::file(const QString &fileName) const { return directory() + fileName; } -QString Core::Tests::TestDataDir::directory(const QString &subdir, bool clean) const +QString TestDataDir::directory(const QString &subdir, bool clean) const { QString path = m_directory; if (!subdir.isEmpty()) diff --git a/src/plugins/coreplugin/plugintestutils.h b/src/plugins/coreplugin/testdatadir.h similarity index 85% rename from src/plugins/coreplugin/plugintestutils.h rename to src/plugins/coreplugin/testdatadir.h index dc4316a51d2..d8d654ca022 100644 --- a/src/plugins/coreplugin/plugintestutils.h +++ b/src/plugins/coreplugin/testdatadir.h @@ -28,25 +28,17 @@ ****************************************************************************/ -#ifndef PLUGINTESTUTILS_H -#define PLUGINTESTUTILS_H +#ifndef TESTDATADIR_H +#define TESTDATADIR_H #include "core_global.h" -#include #include namespace Core { - -class IEditor; - +namespace Internal { namespace Tests { -/// Closing and deleting editors -void CORE_EXPORT closeAndDeleteEditor(Core::IEditor *editor); -void CORE_EXPORT closeAndDeleteEditors(QList editorsToClose); - -/// Referencing test data class CORE_EXPORT TestDataDir { public: @@ -61,6 +53,7 @@ private: }; } // namespace Tests +} // namespace Internal } // namespace Core -#endif // PLUGINTESTUTILS_H +#endif // TESTDATADIR_H diff --git a/src/plugins/cppeditor/cppdoxygen_test.cpp b/src/plugins/cppeditor/cppdoxygen_test.cpp index 5ee9989f608..8feffc6579a 100644 --- a/src/plugins/cppeditor/cppdoxygen_test.cpp +++ b/src/plugins/cppeditor/cppdoxygen_test.cpp @@ -30,7 +30,6 @@ #include "cppeditor.h" #include -#include #include #include #include @@ -116,7 +115,8 @@ TestCase::TestCase(const QByteArray &input) TestCase::~TestCase() { - Core::Tests::closeAndDeleteEditor(editor); + EditorManager::closeEditor(editor, false); + QCoreApplication::processEvents(); // process any pending events // Remove the test file from the code-model CppTools::CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 53c74826fd5..31c4b6513f1 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -34,7 +34,6 @@ #include "cppquickfixassistant.h" #include "cppquickfixes.h" -#include #include #include #include @@ -239,7 +238,6 @@ void TestCase::init(const QStringList &includePaths) // Rehighlight testFile->editorWidget->semanticRehighlight(true); - // Wait for the semantic info from the future while (testFile->editorWidget->semanticInfo().doc.isNull()) QCoreApplication::processEvents(); @@ -265,7 +263,8 @@ TestCase::~TestCase() if (testFile->editor) editorsToClose << testFile->editor; } - Core::Tests::closeAndDeleteEditors(editorsToClose); + EditorManager::closeEditors(editorsToClose, false); + QCoreApplication::processEvents(); // process any pending events // Remove the test files from the code-model CppModelManagerInterface *mmi = CppModelManagerInterface::instance(); diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp index dc001394046..441af4b440f 100644 --- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp +++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp @@ -32,7 +32,6 @@ #include "cppelementevaluator.h" #include "cppvirtualfunctionassistprovider.h" -#include #include #include #include @@ -325,7 +324,8 @@ TestCase::~TestCase() if (testFile->editor) editorsToClose << testFile->editor; } - Core::Tests::closeAndDeleteEditors(editorsToClose); + EditorManager::closeEditors(editorsToClose, false); + QCoreApplication::processEvents(); // process any pending events // Remove the test files from the code-model CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance(); diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 3616561d095..755d0d9b987 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -31,7 +31,6 @@ #include "cppcompletionassist.h" #include "cppmodelmanager.h" -#include #include #include #include @@ -92,7 +91,7 @@ public: ~CompletionTestCase() { - Core::Tests::closeAndDeleteEditor(editor); + EditorManager::closeEditor(editor, /*askAboutModifiedEditors=*/ false); cmm->GC(); QVERIFY(cmm->snapshot().isEmpty()); } diff --git a/src/plugins/cpptools/cppheadersource_test.cpp b/src/plugins/cpptools/cppheadersource_test.cpp index e6937598568..26d833d1c40 100644 --- a/src/plugins/cpptools/cppheadersource_test.cpp +++ b/src/plugins/cpptools/cppheadersource_test.cpp @@ -30,7 +30,7 @@ #include "cpptoolsplugin.h" #include "cpptoolsreuse.h" -#include +#include #include #include @@ -46,7 +46,7 @@ void CppToolsPlugin::test_headersource() QFETCH(QString, headerFileName); bool wasHeader; - Core::Tests::TestDataDir dataDir( + Core::Internal::Tests::TestDataDir dataDir( _(SRCDIR "/../../../tests/cppheadersource/") + _(QTest::currentDataTag())); const QString sourcePath = dataDir.file(sourceFileName); diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp index e83eb6767ab..7b6c3ae2745 100644 --- a/src/plugins/cpptools/cpplocatorfilter_test.cpp +++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp @@ -36,7 +36,7 @@ #include "cppmodelmanager.h" #include -#include +#include #include #include #include @@ -46,6 +46,7 @@ #include using namespace Core; +using namespace Core::Internal::Tests; using namespace CppTools::Internal; using namespace ExtensionSystem; using namespace Locator; @@ -57,7 +58,7 @@ Q_DECLARE_METATYPE(ILocatorFilter *) namespace { -class MyTestDataDir : public Core::Tests::TestDataDir +class MyTestDataDir : public Core::Internal::Tests::TestDataDir { public: MyTestDataDir(const QString &testDataDirectory) @@ -124,7 +125,8 @@ private: virtual void doAfterLocatorRun() { - Core::Tests::closeAndDeleteEditor(m_editor); + EditorManager::closeEditor(m_editor, /*askAboutModifiedEditors=*/ false); + QCoreApplication::processEvents(); QVERIFY(EditorManager::documentModel()->openedDocuments().isEmpty()); m_modelManager->GC(); QVERIFY(m_modelManager->snapshot().isEmpty()); diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp index bf17c90cd3e..3d1383b4695 100644 --- a/src/plugins/cpptools/cppmodelmanager_test.cpp +++ b/src/plugins/cpptools/cppmodelmanager_test.cpp @@ -33,7 +33,7 @@ #include "modelmanagertesthelper.h" #include -#include +#include #include #include #include @@ -62,7 +62,7 @@ namespace { inline QString _(const QByteArray &ba) { return QString::fromLatin1(ba, ba.size()); } -class MyTestDataDir : public Core::Tests::TestDataDir +class MyTestDataDir : public Core::Internal::Tests::TestDataDir { public: MyTestDataDir(const QString &dir) @@ -723,7 +723,7 @@ void CppToolsPlugin::test_modelmanager_gc_if_last_cppeditor_closed() helper.waitForRefreshedSourceFiles(); // Close file/editor - Core::Tests::closeAndDeleteEditor(editor); + Core::EditorManager::closeEditor(editor, /*askAboutModifiedEditors=*/ false); helper.waitForFinishedGc(); // Check: File is removed from the snapshpt @@ -760,7 +760,7 @@ void CppToolsPlugin::test_modelmanager_dont_gc_opened_files() QVERIFY(mm->snapshot().contains(file)); // Close editor - Core::Tests::closeAndDeleteEditor(editor); + Core::EditorManager::closeEditor(editor); helper.waitForFinishedGc(); QVERIFY(mm->snapshot().isEmpty()); } @@ -772,7 +772,7 @@ struct EditorCloser { ~EditorCloser() { if (editor) - Core::Tests::closeAndDeleteEditor(editor); + Core::EditorManager::closeEditor(editor); } }; diff --git a/src/plugins/cpptools/symbolsearcher_test.cpp b/src/plugins/cpptools/symbolsearcher_test.cpp index ffff79bbf58..c5529b7b467 100644 --- a/src/plugins/cpptools/symbolsearcher_test.cpp +++ b/src/plugins/cpptools/symbolsearcher_test.cpp @@ -33,7 +33,7 @@ #include "cppmodelmanager.h" #include "searchsymbols.h" -#include +#include #include #include @@ -43,7 +43,7 @@ using namespace CppTools::Internal; namespace { -class MyTestDataDir : public Core::Tests::TestDataDir +class MyTestDataDir : public Core::Internal::Tests::TestDataDir { public: MyTestDataDir(const QString &testDataDirectory) diff --git a/src/plugins/designer/gotoslot_test.cpp b/src/plugins/designer/gotoslot_test.cpp index 357abaaed75..ef9ed568280 100644 --- a/src/plugins/designer/gotoslot_test.cpp +++ b/src/plugins/designer/gotoslot_test.cpp @@ -34,7 +34,7 @@ #else #include "formeditorw.h" -#include +#include #include #include @@ -47,6 +47,7 @@ #include using namespace Core; +using namespace Core::Internal::Tests; using namespace CppTools; using namespace CPlusPlus; using namespace Designer; @@ -54,7 +55,7 @@ using namespace Designer::Internal; namespace { -class MyTestDataDir : public Core::Tests::TestDataDir { +class MyTestDataDir : public Core::Internal::Tests::TestDataDir { public: MyTestDataDir(const QString &dir) : TestDataDir(QLatin1String(SRCDIR "/../../../tests/designer/") + dir) @@ -133,10 +134,7 @@ public: private: void cleanup() { - DocumentModel *documentModel = EditorManager::documentModel(); - const QList documents = documentModel->openedDocuments(); - const QList editors = documentModel->editorsForDocuments(documents); - Core::Tests::closeAndDeleteEditors(editors); + EditorManager::closeAllEditors(/*askAboutModifiedEditors =*/ false); QVERIFY(EditorManager::documentModel()->openedDocuments().isEmpty()); m_modelManager->GC(); diff --git a/src/plugins/locator/locator_test.cpp b/src/plugins/locator/locator_test.cpp index 201a95e15dd..38b1287b82d 100644 --- a/src/plugins/locator/locator_test.cpp +++ b/src/plugins/locator/locator_test.cpp @@ -33,7 +33,7 @@ #include "basefilefilter.h" #include "locatorfiltertest.h" -#include +#include #include #include @@ -44,7 +44,7 @@ using namespace Locator::Internal::Tests; namespace { -class MyTestDataDir : public Core::Tests::TestDataDir +class MyTestDataDir : public Core::Internal::Tests::TestDataDir { public: MyTestDataDir(const QString &testDataDirectory) diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index 2f30cc16462..322f64c2ba3 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -234,9 +234,11 @@ VcsBaseSubmitEditor::VcsBaseSubmitEditor(const VcsBaseSubmitEditorParameters *pa connect(VcsPlugin::instance(), SIGNAL(settingsChanged(VcsBase::Internal::CommonVcsSettings)), this, SLOT(slotUpdateEditorSettings(VcsBase::Internal::CommonVcsSettings))); + // Commit data refresh might lead to closing the editor, so use a queued connection connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)), - this, SLOT(slotRefreshCommitData())); - connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), this, SLOT(slotRefreshCommitData())); + this, SLOT(slotRefreshCommitData()), Qt::QueuedConnection); + connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), + this, SLOT(slotRefreshCommitData()), Qt::QueuedConnection); Aggregation::Aggregate *aggregate = new Aggregation::Aggregate; aggregate->add(new Find::BaseTextFind(descriptionEdit));