forked from qt-creator/qt-creator
AutoTest: Allow registering ITestTools
Task-number: QTCREATORBUG-23332 Change-Id: I529b1cc1f110739c264c7a021aada063f697b1db Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -48,9 +48,6 @@ TestSettingsWidget::TestSettingsWidget(QWidget *parent)
|
||||
m_ui.frameworksWarn->setVisible(false);
|
||||
m_ui.frameworksWarn->setElideMode(Qt::ElideNone);
|
||||
m_ui.frameworksWarn->setType(Utils::InfoLabel::Warning);
|
||||
m_ui.frameworksWarn->setText(tr("No active test frameworks."));
|
||||
m_ui.frameworksWarn->setToolTip(tr("You will not be able to use the AutoTest plugin without "
|
||||
"having at least one active test framework."));
|
||||
connect(m_ui.frameworkTreeWidget, &QTreeWidget::itemChanged,
|
||||
this, &TestSettingsWidget::onFrameworkItemChanged);
|
||||
connect(m_ui.resetChoicesButton, &QPushButton::clicked,
|
||||
@@ -72,7 +69,7 @@ void TestSettingsWidget::setSettings(const TestSettings &settings)
|
||||
m_ui.openResultsOnFinishCB->setChecked(settings.popupOnFinish);
|
||||
m_ui.openResultsOnFailCB->setChecked(settings.popupOnFail);
|
||||
m_ui.runAfterBuildCB->setCurrentIndex(int(settings.runAfterBuild));
|
||||
populateFrameworksListWidget(settings.frameworks);
|
||||
populateFrameworksListWidget(settings.frameworks, settings.tools);
|
||||
}
|
||||
|
||||
TestSettings TestSettingsWidget::settings() const
|
||||
@@ -90,10 +87,22 @@ TestSettings TestSettingsWidget::settings() const
|
||||
result.popupOnFail = m_ui.openResultsOnFailCB->isChecked();
|
||||
result.runAfterBuild = RunAfterBuildMode(m_ui.runAfterBuildCB->currentIndex());
|
||||
testSettings(result);
|
||||
testToolsSettings(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
void TestSettingsWidget::populateFrameworksListWidget(const QHash<Utils::Id, bool> &frameworks)
|
||||
namespace {
|
||||
|
||||
enum TestBaseInfo
|
||||
{
|
||||
BaseId = Qt::UserRole,
|
||||
BaseType
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void TestSettingsWidget::populateFrameworksListWidget(const QHash<Utils::Id, bool> &frameworks,
|
||||
const QHash<Utils::Id, bool> &testTools)
|
||||
{
|
||||
const TestFrameworks ®istered = TestFrameworkManager::registeredFrameworks();
|
||||
m_ui.frameworkTreeWidget->clear();
|
||||
@@ -102,7 +111,8 @@ void TestSettingsWidget::populateFrameworksListWidget(const QHash<Utils::Id, boo
|
||||
auto item = new QTreeWidgetItem(m_ui.frameworkTreeWidget, QStringList(QLatin1String(framework->name())));
|
||||
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(0, frameworks.value(id) ? Qt::Checked : Qt::Unchecked);
|
||||
item->setData(0, Qt::UserRole, id.toSetting());
|
||||
item->setData(0, BaseId, id.toSetting());
|
||||
item->setData(0, BaseType, ITestBase::Framework);
|
||||
item->setData(1, Qt::CheckStateRole, framework->grouping() ? Qt::Checked : Qt::Unchecked);
|
||||
item->setToolTip(0, tr("Enable or disable test frameworks to be handled by the AutoTest "
|
||||
"plugin."));
|
||||
@@ -111,33 +121,76 @@ void TestSettingsWidget::populateFrameworksListWidget(const QHash<Utils::Id, boo
|
||||
toolTip = tr("Enable or disable grouping of test cases by folder.");
|
||||
item->setToolTip(1, toolTip);
|
||||
}
|
||||
// ...and now the test tools
|
||||
const TestTools ®isteredTools = TestFrameworkManager::registeredTestTools();
|
||||
for (const ITestTool *testTool : registeredTools) {
|
||||
const Utils::Id id = testTool->id();
|
||||
auto item = new QTreeWidgetItem(m_ui.frameworkTreeWidget, {QLatin1String(testTool->name())});
|
||||
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(0, testTools.value(id) ? Qt::Checked : Qt::Unchecked);
|
||||
item->setData(0, BaseId, id.toSetting());
|
||||
item->setData(0, BaseType, ITestBase::Tool);
|
||||
}
|
||||
}
|
||||
|
||||
void TestSettingsWidget::testSettings(TestSettings &settings) const
|
||||
{
|
||||
const QAbstractItemModel *model = m_ui.frameworkTreeWidget->model();
|
||||
QTC_ASSERT(model, return);
|
||||
const int itemCount = model->rowCount();
|
||||
const int itemCount = TestFrameworkManager::registeredFrameworks().size();
|
||||
QTC_ASSERT(itemCount <= model->rowCount(), return);
|
||||
for (int row = 0; row < itemCount; ++row) {
|
||||
QModelIndex idx = model->index(row, 0);
|
||||
const Utils::Id id = Utils::Id::fromSetting(idx.data(Qt::UserRole));
|
||||
const Utils::Id id = Utils::Id::fromSetting(idx.data(BaseId));
|
||||
settings.frameworks.insert(id, idx.data(Qt::CheckStateRole) == Qt::Checked);
|
||||
idx = model->index(row, 1);
|
||||
settings.frameworksGrouping.insert(id, idx.data(Qt::CheckStateRole) == Qt::Checked);
|
||||
}
|
||||
}
|
||||
|
||||
void TestSettingsWidget::testToolsSettings(TestSettings &settings) const
|
||||
{
|
||||
const QAbstractItemModel *model = m_ui.frameworkTreeWidget->model();
|
||||
QTC_ASSERT(model, return);
|
||||
// frameworks are listed before tools
|
||||
int row = TestFrameworkManager::registeredFrameworks().size();
|
||||
const int end = model->rowCount();
|
||||
QTC_ASSERT(row <= end, return);
|
||||
for ( ; row < end; ++row) {
|
||||
const QModelIndex idx = model->index(row, 0);
|
||||
const Utils::Id id = Utils::Id::fromSetting(idx.data(BaseId));
|
||||
settings.tools.insert(id, idx.data(Qt::CheckStateRole) == Qt::Checked);
|
||||
}
|
||||
}
|
||||
|
||||
void TestSettingsWidget::onFrameworkItemChanged()
|
||||
{
|
||||
bool atLeastOneEnabled = false;
|
||||
int mixed = ITestBase::None;
|
||||
if (QAbstractItemModel *model = m_ui.frameworkTreeWidget->model()) {
|
||||
for (int row = 0, count = model->rowCount(); row < count; ++row) {
|
||||
if (model->index(row, 0).data(Qt::CheckStateRole) == Qt::Checked) {
|
||||
m_ui.frameworksWarn->setVisible(false);
|
||||
return;
|
||||
const QModelIndex idx = model->index(row, 0);
|
||||
if (idx.data(Qt::CheckStateRole) == Qt::Checked) {
|
||||
atLeastOneEnabled = true;
|
||||
mixed |= idx.data(BaseType).toInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
m_ui.frameworksWarn->setVisible(true);
|
||||
|
||||
if (!atLeastOneEnabled || (mixed == (ITestBase::Framework | ITestBase::Tool))) {
|
||||
if (!atLeastOneEnabled) {
|
||||
m_ui.frameworksWarn->setText(tr("No active test frameworks or tools."));
|
||||
m_ui.frameworksWarn->setToolTip(tr("You will not be able to use the AutoTest plugin "
|
||||
"without having at least one active test framework."));
|
||||
} else {
|
||||
m_ui.frameworksWarn->setText(tr("Mixing test frameworks and test tools."));
|
||||
m_ui.frameworksWarn->setToolTip(tr("Mixing test frameworks and test tools can lead "
|
||||
"to duplicating run information when using e.g. "
|
||||
"'Run All Tests'."));
|
||||
}
|
||||
}
|
||||
m_ui.frameworksWarn->setVisible(!atLeastOneEnabled
|
||||
|| (mixed == (ITestBase::Framework | ITestBase::Tool)));
|
||||
}
|
||||
|
||||
TestSettingsPage::TestSettingsPage(TestSettings *settings)
|
||||
@@ -176,7 +229,11 @@ void TestSettingsPage::apply()
|
||||
framework->setGrouping(m_settings->frameworksGrouping.value(framework->id(), false));
|
||||
}
|
||||
|
||||
for (ITestTool *testTool : TestFrameworkManager::registeredTestTools())
|
||||
testTool->setActive(m_settings->tools.value(testTool->id(), false));
|
||||
|
||||
TestTreeModel::instance()->synchronizeTestFrameworks();
|
||||
TestTreeModel::instance()->synchronizeTestTools();
|
||||
if (!changedIds.isEmpty())
|
||||
TestTreeModel::instance()->rebuild(changedIds);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user