diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 441af54b5af..e310efe6f2b 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -847,7 +847,6 @@ void PluginManagerPrivate::nextDelayedInitialize() \internal */ PluginManagerPrivate::PluginManagerPrivate(PluginManager *pluginManager) : - m_failedTests(0), delayedInitializeTimer(0), shutdownEventLoop(0), m_profileElapsedMS(0), @@ -1127,6 +1126,7 @@ void PluginManagerPrivate::startTests() return; } + int failedTests = 0; foreach (const PluginManagerPrivate::TestSpec &testSpec, testSpecs) { IPlugin *plugin = testSpec.pluginSpec->plugin(); if (!plugin) @@ -1144,10 +1144,10 @@ void PluginManagerPrivate::startTests() ? generateCompleteTestPlan(plugin, testObjects) : generateCustomTestPlan(plugin, testObjects, testSpec.testFunctionsOrObjects); - m_failedTests += executeTestPlan(testPlan); + failedTests += executeTestPlan(testPlan); } - if (!testSpecs.isEmpty()) - QTimer::singleShot(1, this, SLOT(exitWithNumberOfFailedTests())); + + QTimer::singleShot(0, this, [failedTests]() { emit m_instance->testsFinished(failedTests); }); } #endif @@ -1270,14 +1270,6 @@ void PluginManagerPrivate::asyncShutdownFinished() shutdownEventLoop->exit(); } -/*! - \internal -*/ -void PluginManagerPrivate::exitWithNumberOfFailedTests() -{ - QCoreApplication::exit(m_failedTests); -} - /*! \internal */ diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 7b0ee066f4b..cbf0a2fe4df 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -158,6 +158,7 @@ signals: void pluginsChanged(); void initializationDone(); + void testsFinished(int failedTests); public slots: void remoteArguments(const QString &serializedArguments, QObject *socket); diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h index f219d5c0dae..eb293977f45 100644 --- a/src/libs/extensionsystem/pluginmanager_p.h +++ b/src/libs/extensionsystem/pluginmanager_p.h @@ -102,7 +102,6 @@ public: QHash pluginCategories; QList pluginSpecs; QList testSpecs; - int m_failedTests; QStringList pluginPaths; QString pluginIID; QList allObjects; // ### make this a QList > > ? @@ -138,7 +137,6 @@ public: private slots: void nextDelayedInitialize(); void asyncShutdownFinished(); - void exitWithNumberOfFailedTests(); private: PluginCollection *defaultCollection; diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index a99fab23c52..982c3b9298b 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -323,6 +323,10 @@ ICore::ICore(MainWindow *mainwindow) // Save settings once after all plugins are initialized: connect(PluginManager::instance(), SIGNAL(initializationDone()), this, SLOT(saveSettings())); + connect(PluginManager::instance(), &PluginManager::testsFinished, [this] (int failedTests) { + emit coreAboutToClose(); + QCoreApplication::exit(failedTests); + }); connect(m_mainwindow, SIGNAL(newItemDialogRunningChanged()), this, SIGNAL(newItemDialogRunningChanged())); }