AutoTest: Tie framework settings explicitly to ITestFramework instance

This leaves no doubts regarding lifetime and type.

Change-Id: I1fdd60427a469f32236ea0fa923ec9fa308c338e
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-03-12 13:58:09 +01:00
parent ea8efe58c6
commit 2c79196ab5
19 changed files with 83 additions and 150 deletions

View File

@@ -35,12 +35,12 @@
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
static QSharedPointer<BoostTestSettings> getBoostSettings() static BoostTestSettings *getBoostSettings()
{ {
const Core::Id id = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix( const Core::Id id = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(
BoostTest::Constants::FRAMEWORK_NAME); BoostTest::Constants::FRAMEWORK_NAME);
TestFrameworkManager *manager = TestFrameworkManager::instance(); TestFrameworkManager *manager = TestFrameworkManager::instance();
return qSharedPointerCast<BoostTestSettings>(manager->settingsForTestFramework(id)); return dynamic_cast<BoostTestSettings *>(manager->settingsForTestFramework(id));
} }
TestOutputReader *BoostTestConfiguration::outputReader(const QFutureInterface<TestResultPtr> &fi, TestOutputReader *BoostTestConfiguration::outputReader(const QFutureInterface<TestResultPtr> &fi,

View File

@@ -25,8 +25,6 @@
#include "boosttestframework.h" #include "boosttestframework.h"
#include "boosttestconstants.h" #include "boosttestconstants.h"
#include "boosttestsettings.h"
#include "boosttestsettingspage.h"
#include "boosttesttreeitem.h" #include "boosttesttreeitem.h"
#include "boosttestparser.h" #include "boosttestparser.h"
#include "../testframeworkmanager.h" #include "../testframeworkmanager.h"
@@ -57,20 +55,5 @@ unsigned BoostTestFramework::priority() const
return BoostTest::Constants::FRAMEWORK_PRIORITY; return BoostTest::Constants::FRAMEWORK_PRIORITY;
} }
IFrameworkSettings *BoostTestFramework::createFrameworkSettings() const
{
return new BoostTestSettings;
}
Core::IOptionsPage *BoostTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
{
return new BoostTestSettingsPage(settings, settingsId());
}
bool BoostTestFramework::hasFrameworkSettings() const
{
return true;
}
} // namespace Internal } // namespace Internal
} // namespace Autotest } // namespace Autotest

View File

@@ -27,6 +27,9 @@
#include "../itestframework.h" #include "../itestframework.h"
#include "boosttestsettings.h"
#include "boosttestsettingspage.h"
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
@@ -34,14 +37,16 @@ class BoostTestFramework : public ITestFramework
{ {
public: public:
BoostTestFramework() : ITestFramework(true) {} BoostTestFramework() : ITestFramework(true) {}
private:
const char *name() const override; const char *name() const override;
unsigned priority() const override; unsigned priority() const override;
IFrameworkSettings *createFrameworkSettings() const override; IFrameworkSettings *frameworkSettings() override { return &m_settings; }
Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
bool hasFrameworkSettings() const override;
protected:
ITestParser *createTestParser() const override; ITestParser *createTestParser() const override;
TestTreeItem *createRootNode() const override; TestTreeItem *createRootNode() const override;
BoostTestSettings m_settings;
BoostTestSettingsPage m_settingsPage{&m_settings, settingsId()};
}; };
} // namespace Internal } // namespace Internal

View File

@@ -39,7 +39,7 @@ class BoostTestSettingsWidget : public Core::IOptionsPageWidget
Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::BoostTestSettingsWidget) Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::BoostTestSettingsWidget)
public: public:
explicit BoostTestSettingsWidget(QSharedPointer<BoostTestSettings> settings); explicit BoostTestSettingsWidget(BoostTestSettings *settings);
void apply() final; void apply() final;
@@ -49,10 +49,10 @@ public:
private: private:
void fillComboBoxes(); void fillComboBoxes();
Ui::BoostSettingsPage m_ui; Ui::BoostSettingsPage m_ui;
QSharedPointer<BoostTestSettings> m_settings; BoostTestSettings *m_settings;
}; };
BoostTestSettingsWidget::BoostTestSettingsWidget(QSharedPointer<BoostTestSettings> settings) BoostTestSettingsWidget::BoostTestSettingsWidget(BoostTestSettings *settings)
: m_settings(settings) : m_settings(settings)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
@@ -101,16 +101,13 @@ void BoostTestSettingsWidget::fillComboBoxes()
m_ui.reportLevelCB->addItem("No", QVariant::fromValue(ReportLevel::No)); m_ui.reportLevelCB->addItem("No", QVariant::fromValue(ReportLevel::No));
} }
BoostTestSettingsPage::BoostTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, BoostTestSettingsPage::BoostTestSettingsPage(BoostTestSettings *settings, Core::Id settingsId)
Core::Id settingsId)
{ {
setId(settingsId); setId(settingsId);
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY); setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
setDisplayName(QCoreApplication::translate("BoostTestFramework", setDisplayName(QCoreApplication::translate("BoostTestFramework",
BoostTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); BoostTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
setWidgetCreator([settings] { setWidgetCreator([settings] { return new BoostTestSettingsWidget(settings); });
return new BoostTestSettingsWidget(qSharedPointerCast<BoostTestSettings>(settings));
});
} }
} // Internal } // Internal

View File

@@ -28,15 +28,14 @@
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
namespace Autotest { namespace Autotest {
class IFrameworkSettings;
namespace Internal { namespace Internal {
class BoostTestSettings;
class BoostTestSettingsPage final : public Core::IOptionsPage class BoostTestSettingsPage final : public Core::IOptionsPage
{ {
public: public:
BoostTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, Core::Id settingsId); BoostTestSettingsPage(BoostTestSettings *settings, Core::Id settingsId);
}; };
} // Internal } // Internal

View File

@@ -87,8 +87,8 @@ QStringList GTestConfiguration::argumentsForTestRunner(QStringList *omitted) con
arguments << "--gtest_filter=" + testSets.join(':'); arguments << "--gtest_filter=" + testSets.join(':');
TestFrameworkManager *manager = TestFrameworkManager::instance(); TestFrameworkManager *manager = TestFrameworkManager::instance();
auto gSettings = qSharedPointerCast<GTestSettings>(manager->settingsForTestFramework(id)); auto gSettings = dynamic_cast<GTestSettings *>(manager->settingsForTestFramework(id));
if (gSettings.isNull()) if (!gSettings)
return arguments; return arguments;
if (gSettings->runDisabled) if (gSettings->runDisabled)

View File

@@ -24,8 +24,6 @@
****************************************************************************/ ****************************************************************************/
#include "gtestframework.h" #include "gtestframework.h"
#include "gtestsettings.h"
#include "gtestsettingspage.h"
#include "gtesttreeitem.h" #include "gtesttreeitem.h"
#include "gtestparser.h" #include "gtestparser.h"
#include "../testframeworkmanager.h" #include "../testframeworkmanager.h"
@@ -33,6 +31,14 @@
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
static GTestSettings *g_settings;
GTestFramework::GTestFramework()
: ITestFramework(true)
{
g_settings = &m_settings;
}
ITestParser *GTestFramework::createTestParser() const ITestParser *GTestFramework::createTestParser() const
{ {
return new GTestParser; return new GTestParser;
@@ -56,29 +62,9 @@ unsigned GTestFramework::priority() const
return GTest::Constants::FRAMEWORK_PRIORITY; return GTest::Constants::FRAMEWORK_PRIORITY;
} }
IFrameworkSettings *GTestFramework::createFrameworkSettings() const
{
return new GTestSettings;
}
Core::IOptionsPage *GTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
{
return new GTestSettingsPage(settings, settingsId());
}
bool GTestFramework::hasFrameworkSettings() const
{
return true;
}
QString GTestFramework::currentGTestFilter() QString GTestFramework::currentGTestFilter()
{ {
static const Core::Id id return g_settings->gtestFilter;
= Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(GTest::Constants::FRAMEWORK_NAME);
const auto manager = TestFrameworkManager::instance();
auto gSettings = qSharedPointerCast<GTestSettings>(manager->settingsForTestFramework(id));
return gSettings.isNull() ? QString(GTest::Constants::DEFAULT_FILTER) : gSettings->gtestFilter;
} }
QString GTestFramework::groupingToolTip() const QString GTestFramework::groupingToolTip() const
@@ -90,14 +76,7 @@ QString GTestFramework::groupingToolTip() const
GTest::Constants::GroupMode GTestFramework::groupMode() GTest::Constants::GroupMode GTestFramework::groupMode()
{ {
static const Core::Id id return g_settings->groupMode;
= Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(GTest::Constants::FRAMEWORK_NAME);
const auto manager = TestFrameworkManager::instance();
if (!manager->groupingEnabled(id))
return GTest::Constants::None;
auto gSettings = qSharedPointerCast<GTestSettings>(manager->settingsForTestFramework(id));
return gSettings.isNull() ? GTest::Constants::Directory : gSettings->groupMode;
} }
} // namespace Internal } // namespace Internal

View File

@@ -27,6 +27,8 @@
#include "../itestframework.h" #include "../itestframework.h"
#include "gtestconstants.h" #include "gtestconstants.h"
#include "gtestsettings.h"
#include "gtestsettingspage.h"
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
@@ -34,18 +36,21 @@ namespace Internal {
class GTestFramework : public ITestFramework class GTestFramework : public ITestFramework
{ {
public: public:
GTestFramework() : ITestFramework(true) {} GTestFramework();
const char *name() const override;
unsigned priority() const override;
IFrameworkSettings *createFrameworkSettings() const override;
Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
bool hasFrameworkSettings() const override;
static GTest::Constants::GroupMode groupMode(); static GTest::Constants::GroupMode groupMode();
static QString currentGTestFilter(); static QString currentGTestFilter();
private:
const char *name() const override;
unsigned priority() const override;
QString groupingToolTip() const override; QString groupingToolTip() const override;
protected: IFrameworkSettings *frameworkSettings() override { return &m_settings; }
ITestParser *createTestParser() const override; ITestParser *createTestParser() const override;
TestTreeItem *createRootNode() const override; TestTreeItem *createRootNode() const override;
GTestSettings m_settings;
GTestSettingsPage m_settingsPage{&m_settings, settingsId()};
}; };
} // namespace Internal } // namespace Internal

View File

@@ -46,17 +46,17 @@ class GTestSettingsWidget final : public Core::IOptionsPageWidget
Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::GTestSettingsWidget) Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::GTestSettingsWidget)
public: public:
explicit GTestSettingsWidget(const QSharedPointer<GTestSettings> &settings); explicit GTestSettingsWidget(GTestSettings *settings);
private: private:
void apply() final; void apply() final;
Ui::GTestSettingsPage m_ui; Ui::GTestSettingsPage m_ui;
QString m_currentGTestFilter; QString m_currentGTestFilter;
QSharedPointer<GTestSettings> m_settings; GTestSettings *m_settings;
}; };
GTestSettingsWidget::GTestSettingsWidget(const QSharedPointer<GTestSettings> &settings) GTestSettingsWidget::GTestSettingsWidget(GTestSettings *settings)
: m_settings(settings) : m_settings(settings)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
@@ -109,14 +109,13 @@ void GTestSettingsWidget::apply()
TestTreeModel::instance()->rebuild({id}); TestTreeModel::instance()->rebuild({id});
} }
GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, GTestSettingsPage::GTestSettingsPage(GTestSettings *settings, Core::Id settingsId)
Core::Id settingsId)
{ {
setId(settingsId); setId(settingsId);
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY); setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
setDisplayName(QCoreApplication::translate("GTestFramework", setDisplayName(QCoreApplication::translate("GTestFramework",
GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
setWidgetCreator([settings] { return new GTestSettingsWidget(qSharedPointerCast<GTestSettings>(settings)); }); setWidgetCreator([settings] { return new GTestSettingsWidget(settings); });
} }
} // namespace Internal } // namespace Internal

View File

@@ -28,15 +28,14 @@
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
namespace Autotest { namespace Autotest {
class IFrameworkSettings;
namespace Internal { namespace Internal {
class GTestSettings;
class GTestSettingsPage final : public Core::IOptionsPage class GTestSettingsPage final : public Core::IOptionsPage
{ {
public: public:
GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, Core::Id settingsId); GTestSettingsPage(GTestSettings *settings, Core::Id settingsId);
}; };
} // namespace Internal } // namespace Internal

View File

@@ -28,8 +28,6 @@
#include "testtreeitem.h" #include "testtreeitem.h"
#include "itestparser.h" #include "itestparser.h"
namespace Core { class IOptionsPage; }
namespace Autotest { namespace Autotest {
class IFrameworkSettings; class IFrameworkSettings;
@@ -46,13 +44,8 @@ public:
virtual const char *name() const = 0; virtual const char *name() const = 0;
virtual unsigned priority() const = 0; // should this be modifyable? virtual unsigned priority() const = 0; // should this be modifyable?
virtual bool hasFrameworkSettings() const { return false; }
virtual IFrameworkSettings *createFrameworkSettings() const { return nullptr; } virtual IFrameworkSettings *frameworkSettings() { return nullptr; }
virtual Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
{
Q_UNUSED(settings)
return nullptr;
}
TestTreeItem *rootNode() TestTreeItem *rootNode()
{ if (!m_rootNode) { if (!m_rootNode)

View File

@@ -41,7 +41,7 @@ TestOutputReader *QtTestConfiguration::outputReader(const QFutureInterface<TestR
static const Core::Id id static const Core::Id id
= Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME); = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME);
TestFrameworkManager *manager = TestFrameworkManager::instance(); TestFrameworkManager *manager = TestFrameworkManager::instance();
auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id)); auto qtSettings = dynamic_cast<QtTestSettings *>(manager->settingsForTestFramework(id));
const QtTestOutputReader::OutputMode mode = qtSettings && qtSettings->useXMLOutput const QtTestOutputReader::OutputMode mode = qtSettings && qtSettings->useXMLOutput
? QtTestOutputReader::XML ? QtTestOutputReader::XML
: QtTestOutputReader::PlainText; : QtTestOutputReader::PlainText;
@@ -60,8 +60,8 @@ QStringList QtTestConfiguration::argumentsForTestRunner(QStringList *omitted) co
omitted, false)); omitted, false));
} }
TestFrameworkManager *manager = TestFrameworkManager::instance(); TestFrameworkManager *manager = TestFrameworkManager::instance();
auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id)); auto qtSettings = dynamic_cast<QtTestSettings *>(manager->settingsForTestFramework(id));
if (qtSettings.isNull()) if (!qtSettings)
return arguments; return arguments;
if (qtSettings->useXMLOutput) if (qtSettings->useXMLOutput)
arguments << "-xml"; arguments << "-xml";

View File

@@ -26,8 +26,6 @@
#include "qttestframework.h" #include "qttestframework.h"
#include "qttestconstants.h" #include "qttestconstants.h"
#include "qttestparser.h" #include "qttestparser.h"
#include "qttestsettings.h"
#include "qttestsettingspage.h"
#include "qttesttreeitem.h" #include "qttesttreeitem.h"
namespace Autotest { namespace Autotest {
@@ -46,21 +44,6 @@ TestTreeItem *QtTestFramework::createRootNode() const
QString(), TestTreeItem::Root); QString(), TestTreeItem::Root);
} }
IFrameworkSettings *QtTestFramework::createFrameworkSettings() const
{
return new QtTestSettings;
}
Core::IOptionsPage *QtTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
{
return new QtTestSettingsPage(settings, settingsId());
}
bool QtTestFramework::hasFrameworkSettings() const
{
return true;
}
const char *QtTestFramework::name() const const char *QtTestFramework::name() const
{ {
return QtTest::Constants::FRAMEWORK_NAME; return QtTest::Constants::FRAMEWORK_NAME;

View File

@@ -27,6 +27,9 @@
#include "../itestframework.h" #include "../itestframework.h"
#include "qttestsettings.h"
#include "qttestsettingspage.h"
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
@@ -34,15 +37,16 @@ class QtTestFramework : public ITestFramework
{ {
public: public:
QtTestFramework() : ITestFramework(true) {} QtTestFramework() : ITestFramework(true) {}
private:
const char *name() const override; const char *name() const override;
unsigned priority() const override; unsigned priority() const override;
IFrameworkSettings *createFrameworkSettings() const override;
Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
bool hasFrameworkSettings() const override;
protected:
ITestParser *createTestParser() const override; ITestParser *createTestParser() const override;
TestTreeItem *createRootNode() const override; TestTreeItem *createRootNode() const override;
IFrameworkSettings *frameworkSettings() override { return &m_settings; }
QtTestSettings m_settings;
QtTestSettingsPage m_settingsPage{&m_settings, settingsId()};
}; };
} // namespace Internal } // namespace Internal

View File

@@ -41,16 +41,16 @@ class QtTestSettingsWidget final : public Core::IOptionsPageWidget
Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::QtTestSettingsWidget) Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::QtTestSettingsWidget)
public: public:
explicit QtTestSettingsWidget(QSharedPointer<QtTestSettings> settings); explicit QtTestSettingsWidget(QtTestSettings *settings);
void apply() final; void apply() final;
private: private:
Ui::QtTestSettingsPage m_ui; Ui::QtTestSettingsPage m_ui;
QSharedPointer<QtTestSettings> m_settings; QtTestSettings *m_settings;
}; };
QtTestSettingsWidget::QtTestSettingsWidget(QSharedPointer<QtTestSettings> settings) QtTestSettingsWidget::QtTestSettingsWidget(QtTestSettings *settings)
: m_settings(settings) : m_settings(settings)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
@@ -100,16 +100,13 @@ void QtTestSettingsWidget::apply()
m_settings->toSettings(Core::ICore::settings()); m_settings->toSettings(Core::ICore::settings());
} }
QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, QtTestSettingsPage::QtTestSettingsPage(QtTestSettings *settings, Core::Id settingsId)
Core::Id settingsId)
{ {
setId(settingsId); setId(settingsId);
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY); setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
setDisplayName(QCoreApplication::translate("QtTestFramework", setDisplayName(QCoreApplication::translate("QtTestFramework",
QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
setWidgetCreator([settings] { setWidgetCreator([settings] { return new QtTestSettingsWidget(settings); });
return new QtTestSettingsWidget(qSharedPointerCast<QtTestSettings>(settings));
});
} }
} // namespace Internal } // namespace Internal

View File

@@ -28,15 +28,14 @@
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
namespace Autotest { namespace Autotest {
class IFrameworkSettings;
namespace Internal { namespace Internal {
class QtTestSettings;
class QtTestSettingsPage final : public Core::IOptionsPage class QtTestSettingsPage final : public Core::IOptionsPage
{ {
public: public:
QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, Core::Id settingsId); QtTestSettingsPage(QtTestSettings *settings, Core::Id settingsId);
}; };
} // namespace Internal } // namespace Internal

View File

@@ -46,7 +46,7 @@ TestOutputReader *QuickTestConfiguration::outputReader(const QFutureInterface<Te
static const Core::Id id static const Core::Id id
= Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME); = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME);
TestFrameworkManager *manager = TestFrameworkManager::instance(); TestFrameworkManager *manager = TestFrameworkManager::instance();
auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id)); auto qtSettings = dynamic_cast<QtTestSettings *>(manager->settingsForTestFramework(id));
const QtTestOutputReader::OutputMode mode = qtSettings && qtSettings->useXMLOutput const QtTestOutputReader::OutputMode mode = qtSettings && qtSettings->useXMLOutput
? QtTestOutputReader::XML ? QtTestOutputReader::XML
: QtTestOutputReader::PlainText; : QtTestOutputReader::PlainText;
@@ -67,8 +67,8 @@ QStringList QuickTestConfiguration::argumentsForTestRunner(QStringList *omitted)
} }
TestFrameworkManager *manager = TestFrameworkManager::instance(); TestFrameworkManager *manager = TestFrameworkManager::instance();
auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id)); auto qtSettings = dynamic_cast<QtTestSettings *>(manager->settingsForTestFramework(id));
if (qtSettings.isNull()) if (!qtSettings)
return arguments; return arguments;
if (qtSettings->useXMLOutput) if (qtSettings->useXMLOutput)
arguments << "-xml"; arguments << "-xml";

View File

@@ -67,8 +67,6 @@ TestFrameworkManager::~TestFrameworkManager()
{ {
delete m_testRunner; delete m_testRunner;
delete m_testTreeModel; delete m_testTreeModel;
qDeleteAll(m_frameworkSettingsPages);
m_frameworkSettingsPages.clear();
for (ITestFramework *framework : m_registeredFrameworks.values()) for (ITestFramework *framework : m_registeredFrameworks.values())
delete framework; delete framework;
} }
@@ -82,12 +80,9 @@ bool TestFrameworkManager::registerTestFramework(ITestFramework *framework)
qCDebug(LOG) << "Registering" << id; qCDebug(LOG) << "Registering" << id;
m_registeredFrameworks.insert(id, framework); m_registeredFrameworks.insert(id, framework);
if (framework->hasFrameworkSettings()) { if (IFrameworkSettings *frameworkSettings = framework->frameworkSettings())
QSharedPointer<IFrameworkSettings> frameworkSettings(framework->createFrameworkSettings());
m_frameworkSettings.insert(id, frameworkSettings); m_frameworkSettings.insert(id, frameworkSettings);
if (auto page = framework->createSettingsPage(frameworkSettings))
m_frameworkSettingsPages.append(page);
}
return true; return true;
} }
@@ -161,19 +156,17 @@ ITestParser *TestFrameworkManager::testParserForTestFramework(const Id &framewor
return testParser; return testParser;
} }
QSharedPointer<IFrameworkSettings> TestFrameworkManager::settingsForTestFramework( IFrameworkSettings *TestFrameworkManager::settingsForTestFramework(
const Id &frameworkId) const const Id &frameworkId) const
{ {
return m_frameworkSettings.contains(frameworkId) ? m_frameworkSettings.value(frameworkId) return m_frameworkSettings.value(frameworkId, nullptr);
: QSharedPointer<IFrameworkSettings>();
} }
void TestFrameworkManager::synchronizeSettings(QSettings *s) void TestFrameworkManager::synchronizeSettings(QSettings *s)
{ {
Internal::AutotestPlugin::settings()->fromSettings(s); Internal::AutotestPlugin::settings()->fromSettings(s);
for (const Id &id : m_frameworkSettings.keys()) { for (const Id &id : m_frameworkSettings.keys()) {
QSharedPointer<IFrameworkSettings> fSettings = settingsForTestFramework(id); if (IFrameworkSettings *fSettings = settingsForTestFramework(id))
if (!fSettings.isNull())
fSettings->fromSettings(s); fSettings->fromSettings(s);
} }
} }

View File

@@ -28,7 +28,6 @@
#include "itestframework.h" #include "itestframework.h"
#include <QHash> #include <QHash>
#include <QSharedPointer>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QSettings; class QSettings;
@@ -65,7 +64,7 @@ public:
TestTreeItem *rootNodeForTestFramework(const Core::Id &frameworkId) const; TestTreeItem *rootNodeForTestFramework(const Core::Id &frameworkId) const;
ITestParser *testParserForTestFramework(const Core::Id &frameworkId) const; ITestParser *testParserForTestFramework(const Core::Id &frameworkId) const;
QSharedPointer<IFrameworkSettings> settingsForTestFramework(const Core::Id &frameworkId) const; IFrameworkSettings *settingsForTestFramework(const Core::Id &frameworkId) const;
void synchronizeSettings(QSettings *s); void synchronizeSettings(QSettings *s);
bool isActive(const Core::Id &frameworkId) const; bool isActive(const Core::Id &frameworkId) const;
bool groupingEnabled(const Core::Id &frameworkId) const; bool groupingEnabled(const Core::Id &frameworkId) const;
@@ -77,8 +76,7 @@ private:
QList<Core::Id> activeFrameworkIds() const; QList<Core::Id> activeFrameworkIds() const;
explicit TestFrameworkManager(); explicit TestFrameworkManager();
QHash<Core::Id, ITestFramework *> m_registeredFrameworks; QHash<Core::Id, ITestFramework *> m_registeredFrameworks;
QHash<Core::Id, QSharedPointer<IFrameworkSettings> > m_frameworkSettings; QHash<Core::Id, IFrameworkSettings *> m_frameworkSettings;
QVector<Core::IOptionsPage *> m_frameworkSettingsPages;
TestTreeModel *m_testTreeModel; TestTreeModel *m_testTreeModel;
Internal::TestRunner *m_testRunner; Internal::TestRunner *m_testRunner;