From a8cad2038e9609382493eb6b6adcb5f5720e9bcc Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 13 Sep 2019 10:50:32 +0200 Subject: AutoTest: Tweak run after successful build Make it possible to distinguish between all and selected test cases also for the automatic run after build feature. Change-Id: I91715a7ae4f09cea2e31844940a6b21ae9e62157 Reviewed-by: David Schulz --- src/plugins/autotest/projectsettingswidget.cpp | 22 +++++++---- src/plugins/autotest/projectsettingswidget.h | 3 +- src/plugins/autotest/testprojectsettings.cpp | 5 ++- src/plugins/autotest/testprojectsettings.h | 8 ++-- src/plugins/autotest/testrunner.cpp | 10 +++-- src/plugins/autotest/testsettings.cpp | 5 ++- src/plugins/autotest/testsettings.h | 9 ++++- src/plugins/autotest/testsettingspage.cpp | 4 +- src/plugins/autotest/testsettingspage.ui | 52 ++++++++++++++++++++++---- 9 files changed, 87 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/plugins/autotest/projectsettingswidget.cpp b/src/plugins/autotest/projectsettingswidget.cpp index ad44034c30..4fb66be7f8 100644 --- a/src/plugins/autotest/projectsettingswidget.cpp +++ b/src/plugins/autotest/projectsettingswidget.cpp @@ -29,7 +29,6 @@ #include "testprojectsettings.h" #include -#include #include #include #include @@ -61,12 +60,19 @@ 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); + auto horizontalLayout = new QHBoxLayout; + horizontalLayout->addWidget(new QLabel(tr("Automatically run tests after build"))); + m_runAfterBuild = new QComboBox; + m_runAfterBuild->addItem(tr("None")); + m_runAfterBuild->addItem(tr("All")); + m_runAfterBuild->addItem(tr("Selected")); + m_runAfterBuild->setCurrentIndex(int(m_projectSettings->runAfterBuild())); + horizontalLayout->addWidget(m_runAfterBuild); + horizontalLayout->addItem(createSpacer(QSizePolicy::Expanding, QSizePolicy::Minimum)); + groupBoxLayout->addLayout(horizontalLayout); generalWidget->setLayout(groupBoxLayout); - auto horizontalLayout = new QHBoxLayout; + horizontalLayout = new QHBoxLayout; horizontalLayout->addWidget(m_useGlobalSettings); horizontalLayout->addItem(createSpacer(QSizePolicy::Expanding, QSizePolicy::Minimum)); verticalLayout->addLayout(horizontalLayout); @@ -90,8 +96,10 @@ ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *p }); connect(m_activeFrameworks, &QTreeWidget::itemChanged, this, &ProjectTestSettingsWidget::onActiveFrameworkChanged); - connect(m_runAfterBuild, &QCheckBox::toggled, - m_projectSettings, &TestProjectSettings::setRunAfterBuild); + connect(m_runAfterBuild, QOverload::of(&QComboBox::currentIndexChanged), + this, [this](int index) { + m_projectSettings->setRunAfterBuild(RunAfterBuildMode(index)); + }); m_syncFrameworksTimer.setSingleShot(true); connect(&m_syncFrameworksTimer, &QTimer::timeout, TestTreeModel::instance(), &TestTreeModel::synchronizeTestFrameworks); diff --git a/src/plugins/autotest/projectsettingswidget.h b/src/plugins/autotest/projectsettingswidget.h index b8d4c28096..66da382f02 100644 --- a/src/plugins/autotest/projectsettingswidget.h +++ b/src/plugins/autotest/projectsettingswidget.h @@ -29,7 +29,6 @@ #include QT_BEGIN_NAMESPACE -class QCheckBox; class QComboBox; class QTreeWidget; class QTreeWidgetItem; @@ -55,7 +54,7 @@ private: TestProjectSettings *m_projectSettings; QComboBox *m_useGlobalSettings = nullptr; QTreeWidget *m_activeFrameworks = nullptr; - QCheckBox *m_runAfterBuild = nullptr; + QComboBox *m_runAfterBuild = nullptr; QTimer m_syncFrameworksTimer; }; diff --git a/src/plugins/autotest/testprojectsettings.cpp b/src/plugins/autotest/testprojectsettings.cpp index 29270a7f1b..47f672ea0f 100644 --- a/src/plugins/autotest/testprojectsettings.cpp +++ b/src/plugins/autotest/testprojectsettings.cpp @@ -88,7 +88,8 @@ void TestProjectSettings::load() } const QVariant runAfterBuild = m_project->namedSettings(SK_RUN_AFTER_BUILD); - m_runAfterBuild = runAfterBuild.isValid() ? runAfterBuild.toBool() : false; + m_runAfterBuild = runAfterBuild.isValid() ? RunAfterBuildMode(runAfterBuild.toInt()) + : RunAfterBuildMode::None; } void TestProjectSettings::save() @@ -99,7 +100,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); + m_project->setNamedSettings(SK_RUN_AFTER_BUILD, int(m_runAfterBuild)); } } // namespace Internal diff --git a/src/plugins/autotest/testprojectsettings.h b/src/plugins/autotest/testprojectsettings.h index 3a0814855b..595032ff0c 100644 --- a/src/plugins/autotest/testprojectsettings.h +++ b/src/plugins/autotest/testprojectsettings.h @@ -25,6 +25,8 @@ #pragma once +#include "testsettings.h" + #include namespace Autotest { @@ -39,8 +41,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 setRunAfterBuild(RunAfterBuildMode mode) {m_runAfterBuild = mode; } + RunAfterBuildMode runAfterBuild() const { return m_runAfterBuild; } void setActiveFrameworks(const QMap enabledFrameworks) { m_activeTestFrameworks = enabledFrameworks; } QMap activeFrameworks() const { return m_activeTestFrameworks; } @@ -51,7 +53,7 @@ private: ProjectExplorer::Project *m_project; bool m_useGlobalSettings = true; - bool m_runAfterBuild = false; + RunAfterBuildMode m_runAfterBuild = RunAfterBuildMode::None; QMap m_activeTestFrameworks; }; diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp index 61ccde476b..16104d4413 100644 --- a/src/plugins/autotest/testrunner.cpp +++ b/src/plugins/autotest/testrunner.cpp @@ -674,11 +674,11 @@ void TestRunner::buildFinished(bool success) } } -static bool runAfterBuild() +static RunAfterBuildMode runAfterBuild() { Project *project = SessionManager::startupProject(); if (!project) - return false; + return RunAfterBuildMode::None; if (!project->namedSettings(Constants::SK_USE_GLOBAL).isValid()) return AutotestPlugin::settings()->runAfterBuild; @@ -696,14 +696,16 @@ void TestRunner::onBuildQueueFinished(bool success) if (!success || m_runMode != TestRunMode::None) return; - if (!runAfterBuild()) + RunAfterBuildMode mode = runAfterBuild(); + if (mode == RunAfterBuildMode::None) return; auto testTreeModel = TestTreeModel::instance(); if (!testTreeModel->hasTests()) return; - setSelectedTests(testTreeModel->getAllTestCases()); + setSelectedTests(mode == RunAfterBuildMode::All ? testTreeModel->getAllTestCases() + : testTreeModel->getSelectedTests()); prepareToRunTests(TestRunMode::RunAfterBuild); } diff --git a/src/plugins/autotest/testsettings.cpp b/src/plugins/autotest/testsettings.cpp index 48a447ff2c..b8d9571f9d 100644 --- a/src/plugins/autotest/testsettings.cpp +++ b/src/plugins/autotest/testsettings.cpp @@ -67,7 +67,7 @@ void TestSettings::toSettings(QSettings *s) const s->setValue(popupOnStartKey, popupOnStart); s->setValue(popupOnFinishKey, popupOnFinish); s->setValue(popupOnFailKey, popupOnFail); - s->setValue(runAfterBuildKey, runAfterBuild); + s->setValue(runAfterBuildKey, int(runAfterBuild)); // store frameworks and their current active and grouping state for (const Core::Id &id : frameworks.keys()) { s->setValue(QLatin1String(id.name()), frameworks.value(id)); @@ -89,7 +89,8 @@ void TestSettings::fromSettings(QSettings *s) popupOnStart = s->value(popupOnStartKey, true).toBool(); popupOnFinish = s->value(popupOnFinishKey, true).toBool(); popupOnFail = s->value(popupOnFailKey, false).toBool(); - runAfterBuild = s->value(runAfterBuildKey, false).toBool(); + runAfterBuild = RunAfterBuildMode(s->value(runAfterBuildKey, + int(RunAfterBuildMode::None)).toInt()); // try to get settings for registered frameworks TestFrameworkManager *frameworkManager = TestFrameworkManager::instance(); const QList ®istered = frameworkManager->registeredFrameworkIds(); diff --git a/src/plugins/autotest/testsettings.h b/src/plugins/autotest/testsettings.h index 58a5492ad0..e3279009b3 100644 --- a/src/plugins/autotest/testsettings.h +++ b/src/plugins/autotest/testsettings.h @@ -36,6 +36,13 @@ QT_END_NAMESPACE namespace Autotest { namespace Internal { +enum class RunAfterBuildMode +{ + None, + All, + Selected +}; + struct TestSettings { TestSettings(); @@ -52,7 +59,7 @@ struct TestSettings bool popupOnStart = true; bool popupOnFinish = true; bool popupOnFail = false; - bool runAfterBuild = false; + RunAfterBuildMode runAfterBuild = RunAfterBuildMode::None; QHash frameworks; QHash frameworksGrouping; }; diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp index d67b2072b0..7292ff82db 100644 --- a/src/plugins/autotest/testsettingspage.cpp +++ b/src/plugins/autotest/testsettingspage.cpp @@ -69,7 +69,7 @@ void TestSettingsWidget::setSettings(const TestSettings &settings) m_ui.openResultsOnStartCB->setChecked(settings.popupOnStart); m_ui.openResultsOnFinishCB->setChecked(settings.popupOnFinish); m_ui.openResultsOnFailCB->setChecked(settings.popupOnFail); - m_ui.runAfterBuildCB->setChecked(settings.runAfterBuild); + m_ui.runAfterBuildCB->setCurrentIndex(int(settings.runAfterBuild)); populateFrameworksListWidget(settings.frameworks); } @@ -86,7 +86,7 @@ TestSettings TestSettingsWidget::settings() const result.popupOnStart = m_ui.openResultsOnStartCB->isChecked(); result.popupOnFinish = m_ui.openResultsOnFinishCB->isChecked(); result.popupOnFail = m_ui.openResultsOnFailCB->isChecked(); - result.runAfterBuild = m_ui.runAfterBuildCB->isChecked(); + result.runAfterBuild = RunAfterBuildMode(m_ui.runAfterBuildCB->currentIndex()); frameworkSettings(result); return result; } diff --git a/src/plugins/autotest/testsettingspage.ui b/src/plugins/autotest/testsettingspage.ui index 68689a35cf..a182708c84 100644 --- a/src/plugins/autotest/testsettingspage.ui +++ b/src/plugins/autotest/testsettingspage.ui @@ -145,14 +145,50 @@ Warning: this is an experimental feature and might lead to failing to execute th - - - Runs all tests automatically if a build succeeded. - - - Automatically run after build - - + + + + + Automatically run + + + + + + + Runs chosen tests automatically if a build succeeded. + + + + None + + + + + All + + + + + Selected + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + -- cgit v1.2.1