forked from qt-creator/qt-creator
Autotest: Slim down TestFrameworkManager interface
- sort frameworks at insertion time - apply the 'static' pattern - inline code from convenience functions that are only used once on the caller side Change-Id: Ic4a46ad9487c58b4dfd61658a6fccebb88a428a9 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -27,21 +27,13 @@
|
|||||||
#include "autotestconstants.h"
|
#include "autotestconstants.h"
|
||||||
#include "autotestplugin.h"
|
#include "autotestplugin.h"
|
||||||
#include "iframeworksettings.h"
|
#include "iframeworksettings.h"
|
||||||
#include "itestparser.h"
|
|
||||||
#include "testsettings.h"
|
#include "testsettings.h"
|
||||||
#include "testtreeitem.h"
|
|
||||||
#include "testtreemodel.h"
|
|
||||||
|
|
||||||
#include <coreplugin/dialogs/ioptionspage.h>
|
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QLoggingCategory>
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
static Q_LOGGING_CATEGORY(LOG, "qtc.autotest.frameworkmanager", QtWarningMsg)
|
|
||||||
|
|
||||||
using namespace Core;
|
using namespace Core;
|
||||||
|
|
||||||
namespace Autotest {
|
namespace Autotest {
|
||||||
@@ -53,11 +45,6 @@ TestFrameworkManager::TestFrameworkManager()
|
|||||||
s_instance = this;
|
s_instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestFrameworkManager *TestFrameworkManager::instance()
|
|
||||||
{
|
|
||||||
return s_instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
TestFrameworkManager::~TestFrameworkManager()
|
TestFrameworkManager::~TestFrameworkManager()
|
||||||
{
|
{
|
||||||
qDeleteAll(m_registeredFrameworks);
|
qDeleteAll(m_registeredFrameworks);
|
||||||
@@ -70,46 +57,21 @@ bool TestFrameworkManager::registerTestFramework(ITestFramework *framework)
|
|||||||
QTC_ASSERT(!m_registeredFrameworks.contains(framework), return false);
|
QTC_ASSERT(!m_registeredFrameworks.contains(framework), return false);
|
||||||
// TODO check for unique priority before registering
|
// TODO check for unique priority before registering
|
||||||
m_registeredFrameworks.append(framework);
|
m_registeredFrameworks.append(framework);
|
||||||
|
Utils::sort(m_registeredFrameworks, &ITestFramework::priority);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestFrameworkManager::activateFrameworksFromSettings(const Internal::TestSettings *settings)
|
void TestFrameworkManager::activateFrameworksFromSettings(const Internal::TestSettings *settings)
|
||||||
{
|
{
|
||||||
for (ITestFramework *framework : qAsConst(m_registeredFrameworks)) {
|
for (ITestFramework *framework : qAsConst(s_instance->m_registeredFrameworks)) {
|
||||||
framework->setActive(settings->frameworks.value(framework->id(), false));
|
framework->setActive(settings->frameworks.value(framework->id(), false));
|
||||||
framework->setGrouping(settings->frameworksGrouping.value(framework->id(), false));
|
framework->setGrouping(settings->frameworksGrouping.value(framework->id(), false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TestFrameworks TestFrameworkManager::registeredFrameworks() const
|
TestFrameworks TestFrameworkManager::registeredFrameworks()
|
||||||
{
|
{
|
||||||
return m_registeredFrameworks;
|
return s_instance->m_registeredFrameworks;
|
||||||
}
|
|
||||||
|
|
||||||
TestFrameworks TestFrameworkManager::sortedRegisteredFrameworks() const
|
|
||||||
{
|
|
||||||
TestFrameworks registered = m_registeredFrameworks;
|
|
||||||
Utils::sort(registered, &ITestFramework::priority);
|
|
||||||
qCDebug(LOG) << "Registered frameworks sorted by priority" << registered;
|
|
||||||
return registered;
|
|
||||||
}
|
|
||||||
|
|
||||||
TestFrameworks TestFrameworkManager::activeFrameworks() const
|
|
||||||
{
|
|
||||||
TestFrameworks active;
|
|
||||||
for (ITestFramework *framework : qAsConst(m_registeredFrameworks)) {
|
|
||||||
if (framework->active())
|
|
||||||
active.append(framework);
|
|
||||||
}
|
|
||||||
return active;
|
|
||||||
}
|
|
||||||
|
|
||||||
TestFrameworks TestFrameworkManager::sortedActiveFrameworks() const
|
|
||||||
{
|
|
||||||
TestFrameworks active = activeFrameworks();
|
|
||||||
Utils::sort(active, &ITestFramework::priority);
|
|
||||||
qCDebug(LOG) << "Active frameworks sorted by priority" << active;
|
|
||||||
return active;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ITestFramework *TestFrameworkManager::frameworkForId(Id frameworkId)
|
ITestFramework *TestFrameworkManager::frameworkForId(Id frameworkId)
|
||||||
@@ -129,11 +91,6 @@ void TestFrameworkManager::synchronizeSettings(QSettings *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TestFrameworkManager::hasActiveFrameworks() const
|
|
||||||
{
|
|
||||||
return Utils::anyOf(m_registeredFrameworks, &ITestFramework::active);
|
|
||||||
}
|
|
||||||
|
|
||||||
Id ITestFramework::settingsId() const
|
Id ITestFramework::settingsId() const
|
||||||
{
|
{
|
||||||
return Core::Id(Constants::SETTINGSPAGE_PREFIX)
|
return Core::Id(Constants::SETTINGSPAGE_PREFIX)
|
||||||
|
@@ -27,8 +27,6 @@
|
|||||||
|
|
||||||
#include "itestframework.h"
|
#include "itestframework.h"
|
||||||
|
|
||||||
#include <QHash>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QSettings;
|
class QSettings;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@@ -40,9 +38,6 @@ namespace Internal {
|
|||||||
struct TestSettings;
|
struct TestSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
class IFrameworkSettings;
|
|
||||||
class ITestParser;
|
|
||||||
|
|
||||||
class TestFrameworkManager final
|
class TestFrameworkManager final
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -50,23 +45,14 @@ public:
|
|||||||
TestFrameworkManager();
|
TestFrameworkManager();
|
||||||
~TestFrameworkManager();
|
~TestFrameworkManager();
|
||||||
|
|
||||||
static TestFrameworkManager *instance();
|
bool registerTestFramework(ITestFramework *framework);
|
||||||
|
void synchronizeSettings(QSettings *s);
|
||||||
|
|
||||||
static ITestFramework *frameworkForId(Core::Id frameworkId);
|
static ITestFramework *frameworkForId(Core::Id frameworkId);
|
||||||
|
static void activateFrameworksFromSettings(const Internal::TestSettings *settings);
|
||||||
bool registerTestFramework(ITestFramework *framework);
|
static TestFrameworks registeredFrameworks();
|
||||||
|
|
||||||
void activateFrameworksFromSettings(const Internal::TestSettings *settings);
|
|
||||||
TestFrameworks registeredFrameworks() const;
|
|
||||||
TestFrameworks sortedRegisteredFrameworks() const;
|
|
||||||
TestFrameworks sortedActiveFrameworks() const;
|
|
||||||
|
|
||||||
void synchronizeSettings(QSettings *s);
|
|
||||||
bool hasActiveFrameworks() const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TestFrameworks activeFrameworks() const;
|
|
||||||
|
|
||||||
TestFrameworks m_registeredFrameworks;
|
TestFrameworks m_registeredFrameworks;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -76,7 +76,9 @@ TestNavigationWidget::TestNavigationWidget(QWidget *parent) :
|
|||||||
QHBoxLayout *hLayout = new QHBoxLayout;
|
QHBoxLayout *hLayout = new QHBoxLayout;
|
||||||
m_missingFrameworksWidget->setLayout(hLayout);
|
m_missingFrameworksWidget->setLayout(hLayout);
|
||||||
hLayout->addWidget(new QLabel(tr("No active test frameworks.")));
|
hLayout->addWidget(new QLabel(tr("No active test frameworks.")));
|
||||||
m_missingFrameworksWidget->setVisible(!TestFrameworkManager::instance()->hasActiveFrameworks());
|
const bool hasActiveFrameworks = Utils::anyOf(TestFrameworkManager::registeredFrameworks(),
|
||||||
|
&ITestFramework::active);
|
||||||
|
m_missingFrameworksWidget->setVisible(!hasActiveFrameworks);
|
||||||
QVBoxLayout *layout = new QVBoxLayout;
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
layout->setContentsMargins(0, 0, 0, 0);
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
layout->setSpacing(0);
|
layout->setSpacing(0);
|
||||||
|
@@ -36,6 +36,8 @@ namespace Internal {
|
|||||||
static const char SK_ACTIVE_FRAMEWORKS[] = "AutoTest.ActiveFrameworks";
|
static const char SK_ACTIVE_FRAMEWORKS[] = "AutoTest.ActiveFrameworks";
|
||||||
static const char SK_RUN_AFTER_BUILD[] = "AutoTest.RunAfterBuild";
|
static const char SK_RUN_AFTER_BUILD[] = "AutoTest.RunAfterBuild";
|
||||||
|
|
||||||
|
static Q_LOGGING_CATEGORY(LOG, "qtc.autotest.frameworkmanager", QtWarningMsg)
|
||||||
|
|
||||||
TestProjectSettings::TestProjectSettings(ProjectExplorer::Project *project)
|
TestProjectSettings::TestProjectSettings(ProjectExplorer::Project *project)
|
||||||
: m_project(project)
|
: m_project(project)
|
||||||
{
|
{
|
||||||
@@ -60,7 +62,7 @@ void TestProjectSettings::setUseGlobalSettings(bool useGlobal)
|
|||||||
|
|
||||||
void TestProjectSettings::activateFramework(const Core::Id &id, bool activate)
|
void TestProjectSettings::activateFramework(const Core::Id &id, bool activate)
|
||||||
{
|
{
|
||||||
ITestFramework *framework = TestFrameworkManager::instance()->frameworkForId(id);
|
ITestFramework *framework = TestFrameworkManager::frameworkForId(id);
|
||||||
m_activeTestFrameworks[framework] = activate;
|
m_activeTestFrameworks[framework] = activate;
|
||||||
if (!activate)
|
if (!activate)
|
||||||
framework->resetRootNode();
|
framework->resetRootNode();
|
||||||
@@ -71,8 +73,8 @@ void TestProjectSettings::load()
|
|||||||
const QVariant useGlobal = m_project->namedSettings(Constants::SK_USE_GLOBAL);
|
const QVariant useGlobal = m_project->namedSettings(Constants::SK_USE_GLOBAL);
|
||||||
m_useGlobalSettings = useGlobal.isValid() ? useGlobal.toBool() : true;
|
m_useGlobalSettings = useGlobal.isValid() ? useGlobal.toBool() : true;
|
||||||
|
|
||||||
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
const TestFrameworks registered = TestFrameworkManager::registeredFrameworks();
|
||||||
const TestFrameworks registered = frameworkManager->sortedRegisteredFrameworks();
|
qCDebug(LOG) << "Registered frameworks sorted by priority" << registered;
|
||||||
const QVariant activeFrameworks = m_project->namedSettings(SK_ACTIVE_FRAMEWORKS);
|
const QVariant activeFrameworks = m_project->namedSettings(SK_ACTIVE_FRAMEWORKS);
|
||||||
|
|
||||||
m_activeTestFrameworks.clear();
|
m_activeTestFrameworks.clear();
|
||||||
|
@@ -92,8 +92,7 @@ void TestSettings::fromSettings(QSettings *s)
|
|||||||
runAfterBuild = RunAfterBuildMode(s->value(runAfterBuildKey,
|
runAfterBuild = RunAfterBuildMode(s->value(runAfterBuildKey,
|
||||||
int(RunAfterBuildMode::None)).toInt());
|
int(RunAfterBuildMode::None)).toInt());
|
||||||
// try to get settings for registered frameworks
|
// try to get settings for registered frameworks
|
||||||
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
const TestFrameworks ®istered = TestFrameworkManager::registeredFrameworks();
|
||||||
const TestFrameworks ®istered = frameworkManager->registeredFrameworks();
|
|
||||||
frameworks.clear();
|
frameworks.clear();
|
||||||
frameworksGrouping.clear();
|
frameworksGrouping.clear();
|
||||||
for (const ITestFramework *framework : registered) {
|
for (const ITestFramework *framework : registered) {
|
||||||
|
@@ -93,8 +93,7 @@ TestSettings TestSettingsWidget::settings() const
|
|||||||
|
|
||||||
void TestSettingsWidget::populateFrameworksListWidget(const QHash<Core::Id, bool> &frameworks)
|
void TestSettingsWidget::populateFrameworksListWidget(const QHash<Core::Id, bool> &frameworks)
|
||||||
{
|
{
|
||||||
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
const TestFrameworks ®istered = TestFrameworkManager::registeredFrameworks();
|
||||||
const TestFrameworks ®istered = frameworkManager->sortedRegisteredFrameworks();
|
|
||||||
m_ui.frameworkTreeWidget->clear();
|
m_ui.frameworkTreeWidget->clear();
|
||||||
for (const ITestFramework *framework : registered) {
|
for (const ITestFramework *framework : registered) {
|
||||||
const Core::Id id = framework->id();
|
const Core::Id id = framework->id();
|
||||||
@@ -169,8 +168,12 @@ void TestSettingsPage::apply()
|
|||||||
});
|
});
|
||||||
*m_settings = newSettings;
|
*m_settings = newSettings;
|
||||||
m_settings->toSettings(Core::ICore::settings());
|
m_settings->toSettings(Core::ICore::settings());
|
||||||
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
|
||||||
frameworkManager->activateFrameworksFromSettings(m_settings);
|
for (ITestFramework *framework : TestFrameworkManager::registeredFrameworks()) {
|
||||||
|
framework->setActive(m_settings->frameworks.value(framework->id(), false));
|
||||||
|
framework->setGrouping(m_settings->frameworksGrouping.value(framework->id(), false));
|
||||||
|
}
|
||||||
|
|
||||||
TestTreeModel::instance()->synchronizeTestFrameworks();
|
TestTreeModel::instance()->synchronizeTestFrameworks();
|
||||||
if (!changedIds.isEmpty())
|
if (!changedIds.isEmpty())
|
||||||
TestTreeModel::instance()->rebuild(changedIds);
|
TestTreeModel::instance()->rebuild(changedIds);
|
||||||
|
@@ -44,6 +44,8 @@ using namespace Autotest::Internal;
|
|||||||
|
|
||||||
namespace Autotest {
|
namespace Autotest {
|
||||||
|
|
||||||
|
static Q_LOGGING_CATEGORY(LOG, "qtc.autotest.frameworkmanager", QtWarningMsg)
|
||||||
|
|
||||||
static TestTreeModel *s_instance = nullptr;
|
static TestTreeModel *s_instance = nullptr;
|
||||||
|
|
||||||
TestTreeModel::TestTreeModel(TestCodeParser *parser) :
|
TestTreeModel::TestTreeModel(TestCodeParser *parser) :
|
||||||
@@ -211,11 +213,12 @@ void TestTreeModel::synchronizeTestFrameworks()
|
|||||||
{
|
{
|
||||||
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
||||||
TestFrameworks sorted;
|
TestFrameworks sorted;
|
||||||
TestFrameworkManager *manager = TestFrameworkManager::instance();
|
|
||||||
const QVariant useGlobal = project ? project->namedSettings(Constants::SK_USE_GLOBAL)
|
const QVariant useGlobal = project ? project->namedSettings(Constants::SK_USE_GLOBAL)
|
||||||
: QVariant();
|
: QVariant();
|
||||||
if (!useGlobal.isValid() || AutotestPlugin::projectSettings(project)->useGlobalSettings()) {
|
if (!useGlobal.isValid() || AutotestPlugin::projectSettings(project)->useGlobalSettings()) {
|
||||||
sorted = manager->sortedActiveFrameworks();
|
sorted = Utils::filtered(TestFrameworkManager::registeredFrameworks(),
|
||||||
|
&ITestFramework::active);
|
||||||
|
qCDebug(LOG) << "Active frameworks sorted by priority" << sorted;
|
||||||
} else { // we've got custom project settings
|
} else { // we've got custom project settings
|
||||||
const TestProjectSettings *settings = AutotestPlugin::projectSettings(project);
|
const TestProjectSettings *settings = AutotestPlugin::projectSettings(project);
|
||||||
const QMap<ITestFramework *, bool> active = settings->activeFrameworks();
|
const QMap<ITestFramework *, bool> active = settings->activeFrameworks();
|
||||||
|
Reference in New Issue
Block a user