Autotest: use new settings page convenience for Settings

Change-Id: I2e51b176b0874dc63370a0ddbd07c04b976da747
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-01-10 10:33:27 +01:00
parent 7c0678d9a4
commit d86fba3ee1
6 changed files with 139 additions and 228 deletions

View File

@@ -27,43 +27,59 @@
#include "boosttestconstants.h" #include "boosttestconstants.h"
#include "boosttestsettings.h" #include "boosttestsettings.h"
#include "../testframeworkmanager.h" #include "../testframeworkmanager.h"
#include "ui_boosttestsettingspage.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
BoostTestSettingsWidget::BoostTestSettingsWidget(QWidget *parent) : class BoostTestSettingsWidget : public Core::IOptionsPageWidget
QWidget(parent) {
QT_DECLARE_DEPRECATED_TR_FUNCTIONS(Autotest::Internal::BoostTestSettingsWidget)
public:
explicit BoostTestSettingsWidget(QSharedPointer<BoostTestSettings> settings);
void apply() final;
void finish() final {}
void setSettings(const BoostTestSettings &settings);
BoostTestSettings settings() const;
private:
void fillComboBoxes();
Ui::BoostSettingsPage m_ui;
QSharedPointer<BoostTestSettings> m_settings;
};
BoostTestSettingsWidget::BoostTestSettingsWidget(QSharedPointer<BoostTestSettings> settings)
: m_settings(settings)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
fillComboBoxes(); fillComboBoxes();
connect(m_ui.randomizeCB, &QCheckBox::toggled, m_ui.seedSB, &QSpinBox::setEnabled); connect(m_ui.randomizeCB, &QCheckBox::toggled, m_ui.seedSB, &QSpinBox::setEnabled);
m_ui.logFormatCB->setCurrentIndex(int(m_settings->logLevel));
m_ui.reportLevelCB->setCurrentIndex(int(m_settings->reportLevel));
m_ui.randomizeCB->setChecked(m_settings->randomize);
m_ui.seedSB->setValue(m_settings->seed);
m_ui.systemErrorCB->setChecked(m_settings->systemErrors);
m_ui.fpExceptions->setChecked(m_settings->fpExceptions);
m_ui.memoryLeakCB->setChecked(m_settings->memLeaks);
} }
void BoostTestSettingsWidget::setSettings(const BoostTestSettings &settings) void BoostTestSettingsWidget::apply()
{ {
m_ui.logFormatCB->setCurrentIndex(int(settings.logLevel)); m_settings->logLevel = LogLevel(m_ui.logFormatCB->currentData().toInt());
m_ui.reportLevelCB->setCurrentIndex(int(settings.reportLevel)); m_settings->reportLevel = ReportLevel(m_ui.reportLevelCB->currentData().toInt());
m_ui.randomizeCB->setChecked(settings.randomize); m_settings->randomize = m_ui.randomizeCB->isChecked();
m_ui.seedSB->setValue(settings.seed); m_settings->seed = m_ui.seedSB->value();
m_ui.systemErrorCB->setChecked(settings.systemErrors); m_settings->systemErrors = m_ui.systemErrorCB->isChecked();
m_ui.fpExceptions->setChecked(settings.fpExceptions); m_settings->fpExceptions = m_ui.fpExceptions->isChecked();
m_ui.memoryLeakCB->setChecked(settings.memLeaks); m_settings->memLeaks = m_ui.memoryLeakCB->isChecked();
}
BoostTestSettings BoostTestSettingsWidget::settings() const m_settings->toSettings(Core::ICore::settings());
{
BoostTestSettings result;
result.logLevel = LogLevel(m_ui.logFormatCB->currentData().toInt());
result.reportLevel = ReportLevel(m_ui.reportLevelCB->currentData().toInt());
result.randomize = m_ui.randomizeCB->isChecked();
result.seed = m_ui.seedSB->value();
result.systemErrors = m_ui.systemErrorCB->isChecked();
result.fpExceptions = m_ui.fpExceptions->isChecked();
result.memLeaks = m_ui.memoryLeakCB->isChecked();
return result;
} }
void BoostTestSettingsWidget::fillComboBoxes() void BoostTestSettingsWidget::fillComboBoxes()
@@ -88,29 +104,13 @@ void BoostTestSettingsWidget::fillComboBoxes()
BoostTestSettingsPage::BoostTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, BoostTestSettingsPage::BoostTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
const ITestFramework *framework) const ITestFramework *framework)
: ITestSettingsPage(framework), : ITestSettingsPage(framework)
m_settings(qSharedPointerCast<BoostTestSettings>(settings))
{ {
setDisplayName(QCoreApplication::translate("BoostTestFramework", setDisplayName(QCoreApplication::translate("BoostTestFramework",
BoostTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); BoostTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
} setWidgetCreator([settings] {
return new BoostTestSettingsWidget(qSharedPointerCast<BoostTestSettings>(settings));
QWidget *BoostTestSettingsPage::widget() });
{
if (!m_widget) {
m_widget = new BoostTestSettingsWidget;
m_widget->setSettings(*m_settings);
}
return m_widget;
}
void BoostTestSettingsPage::apply()
{
if (!m_widget) // page was not shown at all
return;
*m_settings = m_widget->settings();
m_settings->toSettings(Core::ICore::settings());
} }
} // Internal } // Internal

View File

@@ -25,46 +25,19 @@
#pragma once #pragma once
#include "ui_boosttestsettingspage.h"
#include "../itestsettingspage.h" #include "../itestsettingspage.h"
#include <QPointer>
namespace Autotest { namespace Autotest {
class IFrameworkSettings; class IFrameworkSettings;
namespace Internal { namespace Internal {
class BoostTestSettings; class BoostTestSettingsPage final : public ITestSettingsPage
class BoostTestSettingsWidget : public QWidget
{ {
Q_OBJECT
public:
explicit BoostTestSettingsWidget(QWidget *parent = nullptr);
void setSettings(const BoostTestSettings &settings);
BoostTestSettings settings() const;
private:
void fillComboBoxes();
Ui::BoostSettingsPage m_ui;
};
class BoostTestSettingsPage : public ITestSettingsPage
{
Q_OBJECT
public: public:
BoostTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, BoostTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
const ITestFramework *framework); const ITestFramework *framework);
QWidget *widget() override;
void apply() override;
private:
QSharedPointer<BoostTestSettings> m_settings;
QPointer<BoostTestSettingsWidget> m_widget;
}; };
} // Internal } // Internal

View File

@@ -30,6 +30,7 @@
#include "../autotestconstants.h" #include "../autotestconstants.h"
#include "../testframeworkmanager.h" #include "../testframeworkmanager.h"
#include "ui_gtestsettingspage.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
namespace Autotest { namespace Autotest {
@@ -40,7 +41,24 @@ static bool validateFilter(Utils::FancyLineEdit *edit, QString * /*error*/)
return edit && GTestUtils::isValidGTestFilter(edit->text()); return edit && GTestUtils::isValidGTestFilter(edit->text());
} }
GTestSettingsWidget::GTestSettingsWidget() class GTestSettingsWidget final : public Core::IOptionsPageWidget
{
Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::GTestSettingsWidget)
public:
explicit GTestSettingsWidget(const QSharedPointer<GTestSettings> &settings);
private:
void apply() final;
void finish() final {}
Ui::GTestSettingsPage m_ui;
QString m_currentGTestFilter;
QSharedPointer<GTestSettings> m_settings;
};
GTestSettingsWidget::GTestSettingsWidget(const QSharedPointer<GTestSettings> &settings)
: m_settings(settings)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
m_ui.filterLineEdit->setValidationFunction(&validateFilter); m_ui.filterLineEdit->setValidationFunction(&validateFilter);
@@ -52,67 +70,38 @@ GTestSettingsWidget::GTestSettingsWidget()
}); });
connect(m_ui.repeatGTestsCB, &QCheckBox::toggled, m_ui.repetitionSpin, &QSpinBox::setEnabled); connect(m_ui.repeatGTestsCB, &QCheckBox::toggled, m_ui.repetitionSpin, &QSpinBox::setEnabled);
connect(m_ui.shuffleGTestsCB, &QCheckBox::toggled, m_ui.seedSpin, &QSpinBox::setEnabled); connect(m_ui.shuffleGTestsCB, &QCheckBox::toggled, m_ui.seedSpin, &QSpinBox::setEnabled);
m_ui.runDisabledGTestsCB->setChecked(m_settings->runDisabled);
m_ui.repeatGTestsCB->setChecked(m_settings->repeat);
m_ui.shuffleGTestsCB->setChecked(m_settings->shuffle);
m_ui.repetitionSpin->setValue(m_settings->iterations);
m_ui.seedSpin->setValue(m_settings->seed);
m_ui.breakOnFailureCB->setChecked(m_settings->breakOnFailure);
m_ui.throwOnFailureCB->setChecked(m_settings->throwOnFailure);
m_ui.groupModeCombo->setCurrentIndex(m_settings->groupMode - 1); // there's None for internal use
m_ui.filterLineEdit->setText(m_settings->gtestFilter);
m_currentGTestFilter = m_settings->gtestFilter; // store it temporarily (if edit is invalid)
} }
void GTestSettingsWidget::setSettings(const GTestSettings &settings) void GTestSettingsWidget::apply()
{ {
m_ui.runDisabledGTestsCB->setChecked(settings.runDisabled);
m_ui.repeatGTestsCB->setChecked(settings.repeat);
m_ui.shuffleGTestsCB->setChecked(settings.shuffle);
m_ui.repetitionSpin->setValue(settings.iterations);
m_ui.seedSpin->setValue(settings.seed);
m_ui.breakOnFailureCB->setChecked(settings.breakOnFailure);
m_ui.throwOnFailureCB->setChecked(settings.throwOnFailure);
m_ui.groupModeCombo->setCurrentIndex(settings.groupMode - 1); // there's None for internal use
m_ui.filterLineEdit->setText(settings.gtestFilter);
m_currentGTestFilter = settings.gtestFilter; // store it temporarily (if edit is invalid)
}
GTestSettings GTestSettingsWidget::settings() const
{
GTestSettings result;
result.runDisabled = m_ui.runDisabledGTestsCB->isChecked();
result.repeat = m_ui.repeatGTestsCB->isChecked();
result.shuffle = m_ui.shuffleGTestsCB->isChecked();
result.iterations = m_ui.repetitionSpin->value();
result.seed = m_ui.seedSpin->value();
result.breakOnFailure = m_ui.breakOnFailureCB->isChecked();
result.throwOnFailure = m_ui.throwOnFailureCB->isChecked();
result.groupMode = static_cast<GTest::Constants::GroupMode>(
m_ui.groupModeCombo->currentIndex() + 1);
if (m_ui.filterLineEdit->isValid())
result.gtestFilter = m_ui.filterLineEdit->text();
else
result.gtestFilter = m_currentGTestFilter;
return result;
}
GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
const ITestFramework *framework)
: ITestSettingsPage(framework),
m_settings(qSharedPointerCast<GTestSettings>(settings))
{
setDisplayName(QCoreApplication::translate("GTestFramework",
GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
}
QWidget *GTestSettingsPage::widget()
{
if (!m_widget) {
m_widget = new GTestSettingsWidget;
m_widget->setSettings(*m_settings);
}
return m_widget;
}
void GTestSettingsPage::apply()
{
if (!m_widget) // page was not shown at all
return;
GTest::Constants::GroupMode oldGroupMode = m_settings->groupMode; GTest::Constants::GroupMode oldGroupMode = m_settings->groupMode;
const QString oldFilter = m_settings->gtestFilter; const QString oldFilter = m_settings->gtestFilter;
*m_settings = m_widget->settings();
m_settings->runDisabled = m_ui.runDisabledGTestsCB->isChecked();
m_settings->repeat = m_ui.repeatGTestsCB->isChecked();
m_settings->shuffle = m_ui.shuffleGTestsCB->isChecked();
m_settings->iterations = m_ui.repetitionSpin->value();
m_settings->seed = m_ui.seedSpin->value();
m_settings->breakOnFailure = m_ui.breakOnFailureCB->isChecked();
m_settings->throwOnFailure = m_ui.throwOnFailureCB->isChecked();
m_settings->groupMode = static_cast<GTest::Constants::GroupMode>(
m_ui.groupModeCombo->currentIndex() + 1);
if (m_ui.filterLineEdit->isValid())
m_settings->gtestFilter = m_ui.filterLineEdit->text();
else
m_settings->gtestFilter = m_currentGTestFilter;
m_settings->toSettings(Core::ICore::settings()); m_settings->toSettings(Core::ICore::settings());
if (m_settings->groupMode == oldGroupMode && oldFilter == m_settings->gtestFilter) if (m_settings->groupMode == oldGroupMode && oldFilter == m_settings->gtestFilter)
return; return;
@@ -121,5 +110,14 @@ void GTestSettingsPage::apply()
TestTreeModel::instance()->rebuild({id}); TestTreeModel::instance()->rebuild({id});
} }
GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
const ITestFramework *framework)
: ITestSettingsPage(framework)
{
setDisplayName(QCoreApplication::translate("GTestFramework",
GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
setWidgetCreator([settings] { return new GTestSettingsWidget(qSharedPointerCast<GTestSettings>(settings)); });
}
} // namespace Internal } // namespace Internal
} // namespace Autotest } // namespace Autotest

View File

@@ -25,47 +25,18 @@
#pragma once #pragma once
#include "ui_gtestsettingspage.h"
#include "../itestsettingspage.h" #include "../itestsettingspage.h"
#include <QPointer>
namespace Autotest { namespace Autotest {
class IFrameworkSettings; class IFrameworkSettings;
namespace Internal { namespace Internal {
class GTestSettings; class GTestSettingsPage final : public ITestSettingsPage
class GTestSettingsWidget : public QWidget
{ {
Q_OBJECT
public:
GTestSettingsWidget();
void setSettings(const GTestSettings &settings);
GTestSettings settings() const;
private:
Ui::GTestSettingsPage m_ui;
QString m_currentGTestFilter;
};
class GTestSettingsPage : public ITestSettingsPage
{
Q_OBJECT
public: public:
GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, const ITestFramework *framework); GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, const ITestFramework *framework);
QWidget *widget() override;
void apply() override;
private:
QSharedPointer<GTestSettings> m_settings;
QPointer<GTestSettingsWidget> m_widget;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -27,6 +27,7 @@
#include "qttestconstants.h" #include "qttestconstants.h"
#include "qttestsettingspage.h" #include "qttestsettingspage.h"
#include "qttestsettings.h" #include "qttestsettings.h"
#include "ui_qttestsettingspage.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
@@ -35,20 +36,33 @@
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
QtTestSettingsWidget::QtTestSettingsWidget() class QtTestSettingsWidget final : public Core::IOptionsPageWidget
{
Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::QtTestSettingsWidget)
public:
explicit QtTestSettingsWidget(QSharedPointer<QtTestSettings> settings);
void apply() final;
void finish() final {}
private:
Ui::QtTestSettingsPage m_ui;
QSharedPointer<QtTestSettings> m_settings;
};
QtTestSettingsWidget::QtTestSettingsWidget(QSharedPointer<QtTestSettings> settings)
: m_settings(settings)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
m_ui.callgrindRB->setEnabled(Utils::HostOsInfo::isAnyUnixHost()); // valgrind available on UNIX m_ui.callgrindRB->setEnabled(Utils::HostOsInfo::isAnyUnixHost()); // valgrind available on UNIX
m_ui.perfRB->setEnabled(Utils::HostOsInfo::isLinuxHost()); // according to docs perf Linux only m_ui.perfRB->setEnabled(Utils::HostOsInfo::isLinuxHost()); // according to docs perf Linux only
}
void QtTestSettingsWidget::setSettings(const QtTestSettings &settings) m_ui.disableCrashhandlerCB->setChecked(m_settings->noCrashHandler);
{ m_ui.useXMLOutputCB->setChecked(m_settings->useXMLOutput);
m_ui.disableCrashhandlerCB->setChecked(settings.noCrashHandler); m_ui.verboseBenchmarksCB->setChecked(m_settings->verboseBench);
m_ui.useXMLOutputCB->setChecked(settings.useXMLOutput); m_ui.logSignalsAndSlotsCB->setChecked(m_settings->logSignalsSlots);
m_ui.verboseBenchmarksCB->setChecked(settings.verboseBench); switch (m_settings->metrics) {
m_ui.logSignalsAndSlotsCB->setChecked(settings.logSignalsSlots);
switch (settings.metrics) {
case MetricsType::Walltime: case MetricsType::Walltime:
m_ui.walltimeRB->setChecked(true); m_ui.walltimeRB->setChecked(true);
break; break;
@@ -67,52 +81,35 @@ void QtTestSettingsWidget::setSettings(const QtTestSettings &settings)
} }
} }
QtTestSettings QtTestSettingsWidget::settings() const void QtTestSettingsWidget::apply()
{ {
QtTestSettings result; m_settings->noCrashHandler = m_ui.disableCrashhandlerCB->isChecked();
m_settings->useXMLOutput = m_ui.useXMLOutputCB->isChecked();
result.noCrashHandler = m_ui.disableCrashhandlerCB->isChecked(); m_settings->verboseBench = m_ui.verboseBenchmarksCB->isChecked();
result.useXMLOutput = m_ui.useXMLOutputCB->isChecked(); m_settings->logSignalsSlots = m_ui.logSignalsAndSlotsCB->isChecked();
result.verboseBench = m_ui.verboseBenchmarksCB->isChecked();
result.logSignalsSlots = m_ui.logSignalsAndSlotsCB->isChecked();
if (m_ui.walltimeRB->isChecked()) if (m_ui.walltimeRB->isChecked())
result.metrics = MetricsType::Walltime; m_settings->metrics = MetricsType::Walltime;
else if (m_ui.tickcounterRB->isChecked()) else if (m_ui.tickcounterRB->isChecked())
result.metrics = MetricsType::TickCounter; m_settings->metrics = MetricsType::TickCounter;
else if (m_ui.eventCounterRB->isChecked()) else if (m_ui.eventCounterRB->isChecked())
result.metrics = MetricsType::EventCounter; m_settings->metrics = MetricsType::EventCounter;
else if (m_ui.callgrindRB->isChecked()) else if (m_ui.callgrindRB->isChecked())
result.metrics = MetricsType::CallGrind; m_settings->metrics = MetricsType::CallGrind;
else if (m_ui.perfRB->isChecked()) else if (m_ui.perfRB->isChecked())
result.metrics = MetricsType::Perf; m_settings->metrics = MetricsType::Perf;
return result; m_settings->toSettings(Core::ICore::settings());
} }
QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
const ITestFramework *framework) const ITestFramework *framework)
: ITestSettingsPage(framework), : ITestSettingsPage(framework)
m_settings(qSharedPointerCast<QtTestSettings>(settings))
{ {
setDisplayName(QCoreApplication::translate("QtTestFramework", setDisplayName(QCoreApplication::translate("QtTestFramework",
QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
} setWidgetCreator([settings] {
return new QtTestSettingsWidget(qSharedPointerCast<QtTestSettings>(settings));
QWidget *QtTestSettingsPage::widget() });
{
if (!m_widget) {
m_widget = new QtTestSettingsWidget;
m_widget->setSettings(*m_settings);
}
return m_widget;
}
void QtTestSettingsPage::apply()
{
if (!m_widget) // page was not shown at all
return;
*m_settings = m_widget->settings();
m_settings->toSettings(Core::ICore::settings());
} }
} // namespace Internal } // namespace Internal

View File

@@ -25,46 +25,18 @@
#pragma once #pragma once
#include "ui_qttestsettingspage.h"
#include "../itestsettingspage.h" #include "../itestsettingspage.h"
#include <QPointer>
namespace Autotest { namespace Autotest {
class IFrameworkSettings; class IFrameworkSettings;
namespace Internal { namespace Internal {
class QtTestSettings; class QtTestSettingsPage final : public ITestSettingsPage
class QtTestSettingsWidget : public QWidget
{ {
Q_OBJECT
public:
QtTestSettingsWidget();
void setSettings(const QtTestSettings &settings);
QtTestSettings settings() const;
private:
Ui::QtTestSettingsPage m_ui;
};
class QtTestSettingsPage : public ITestSettingsPage
{
Q_OBJECT
public: public:
QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, const ITestFramework *framework); QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, const ITestFramework *framework);
QWidget *widget() override;
void apply() override;
private:
QSharedPointer<QtTestSettings> m_settings;
QPointer<QtTestSettingsWidget> m_widget;
}; };
} // namespace Internal } // namespace Internal