diff --git a/src/plugins/autotest/projectsettingswidget.cpp b/src/plugins/autotest/projectsettingswidget.cpp index f8263938240..9ed5136dea6 100644 --- a/src/plugins/autotest/projectsettingswidget.cpp +++ b/src/plugins/autotest/projectsettingswidget.cpp @@ -29,6 +29,7 @@ #include "testprojectsettings.h" #include +#include #include #include #include @@ -60,6 +61,9 @@ ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *p m_activeFrameworks->setRootIsDecorated(false); groupBoxLayout->addWidget(new QLabel(tr("Active frameworks:"))); groupBoxLayout->addWidget(m_activeFrameworks); + m_runAfterBuild = new QCheckBox(tr("Automatically run after build")); + m_runAfterBuild->setChecked(m_projectSettings->runAfterBuild()); + groupBoxLayout->addWidget(m_runAfterBuild); generalWidget->setLayout(groupBoxLayout); auto horizontalLayout = new QHBoxLayout; @@ -85,6 +89,8 @@ ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *p }); connect(m_activeFrameworks, &QTreeWidget::itemChanged, this, &ProjectTestSettingsWidget::onActiveFrameworkChanged); + connect(m_runAfterBuild, &QCheckBox::toggled, + m_projectSettings, &TestProjectSettings::setRunAfterBuild); } void ProjectTestSettingsWidget::populateFrameworks(const QMap &frameworks) diff --git a/src/plugins/autotest/projectsettingswidget.h b/src/plugins/autotest/projectsettingswidget.h index 2424f9138ba..19639472021 100644 --- a/src/plugins/autotest/projectsettingswidget.h +++ b/src/plugins/autotest/projectsettingswidget.h @@ -28,6 +28,7 @@ #include QT_BEGIN_NAMESPACE +class QCheckBox; class QComboBox; class QTreeWidget; class QTreeWidgetItem; @@ -53,6 +54,7 @@ private: TestProjectSettings *m_projectSettings; QComboBox *m_useGlobalSettings = nullptr; QTreeWidget *m_activeFrameworks = nullptr; + QCheckBox *m_runAfterBuild = nullptr; }; } // namespace Internal diff --git a/src/plugins/autotest/testprojectsettings.cpp b/src/plugins/autotest/testprojectsettings.cpp index 07c8d3125a0..9c1555f106e 100644 --- a/src/plugins/autotest/testprojectsettings.cpp +++ b/src/plugins/autotest/testprojectsettings.cpp @@ -34,6 +34,7 @@ namespace Autotest { namespace Internal { static const char SK_ACTIVE_FRAMEWORKS[] = "AutoTest.ActiveFrameworks"; +static const char SK_RUN_AFTER_BUILD[] = "AutoTest.RunAfterBuild"; TestProjectSettings::TestProjectSettings(ProjectExplorer::Project *project) : m_project(project) @@ -87,6 +88,9 @@ void TestProjectSettings::load() for (const Core::Id &id : registered) m_activeTestFrameworks.insert(id, frameworkManager->isActive(id)); } + + const QVariant runAfterBuild = m_project->namedSettings(SK_RUN_AFTER_BUILD); + m_runAfterBuild = runAfterBuild.isValid() ? runAfterBuild.toBool() : false; } void TestProjectSettings::save() @@ -97,6 +101,7 @@ void TestProjectSettings::save() for (auto it = m_activeTestFrameworks.cbegin(); it != end; ++it) activeFrameworks.insert(it.key().toString(), it.value()); m_project->setNamedSettings(SK_ACTIVE_FRAMEWORKS, activeFrameworks); + m_project->setNamedSettings(SK_RUN_AFTER_BUILD, m_runAfterBuild); } } // namespace Internal diff --git a/src/plugins/autotest/testprojectsettings.h b/src/plugins/autotest/testprojectsettings.h index 1c3d5f2f0df..3a0814855ba 100644 --- a/src/plugins/autotest/testprojectsettings.h +++ b/src/plugins/autotest/testprojectsettings.h @@ -39,6 +39,8 @@ public: void setUseGlobalSettings(bool useGlobal); bool useGlobalSettings() const { return m_useGlobalSettings; } + void setRunAfterBuild(bool enabled) {m_runAfterBuild = enabled; } + bool runAfterBuild() const { return m_runAfterBuild; } void setActiveFrameworks(const QMap enabledFrameworks) { m_activeTestFrameworks = enabledFrameworks; } QMap activeFrameworks() const { return m_activeTestFrameworks; } @@ -49,6 +51,7 @@ private: ProjectExplorer::Project *m_project; bool m_useGlobalSettings = true; + bool m_runAfterBuild = false; QMap m_activeTestFrameworks; }; diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp index 6f03d9e7647..0e622901014 100644 --- a/src/plugins/autotest/testrunner.cpp +++ b/src/plugins/autotest/testrunner.cpp @@ -27,6 +27,7 @@ #include "autotestconstants.h" #include "autotestplugin.h" +#include "testprojectsettings.h" #include "testresultspane.h" #include "testrunconfiguration.h" #include "testsettings.h" @@ -675,6 +676,20 @@ void TestRunner::buildFinished(bool success) } } +static bool runAfterBuild() +{ + ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); + if (!project) + return false; + + if (!project->namedSettings(Constants::SK_USE_GLOBAL).isValid()) + return AutotestPlugin::settings()->runAfterBuild; + + TestProjectSettings *projectSettings = AutotestPlugin::projectSettings(project); + return projectSettings->useGlobalSettings() ? AutotestPlugin::settings()->runAfterBuild + : projectSettings->runAfterBuild(); +} + void TestRunner::onBuildQueueFinished(bool success) { if (m_executingTests || !m_selectedTests.isEmpty()) // paranoia! @@ -683,7 +698,7 @@ void TestRunner::onBuildQueueFinished(bool success) if (!success || m_runMode != TestRunMode::None) return; - if (!AutotestPlugin::settings()->runAfterBuild) + if (!runAfterBuild()) return; auto testTreeModel = TestTreeModel::instance();