forked from qt-creator/qt-creator
AutoTest: Re-order responsibilities
Keep the timer for syncing frameworks where it is really used, do not create functions that are not necessary at all. Change-Id: Ie0a49a2611dc67510b72562455ea2a1af7b1c538 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -148,7 +148,7 @@ AutotestPluginPrivate::AutotestPluginPrivate(AutotestPlugin *parent)
|
|||||||
ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory);
|
ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory);
|
||||||
|
|
||||||
m_frameworkManager->activateFrameworksFromSettings(q->settings());
|
m_frameworkManager->activateFrameworksFromSettings(q->settings());
|
||||||
TestTreeModel::instance()->scheduleTestFrameworksSync(true);
|
TestTreeModel::instance()->synchronizeTestFrameworks();
|
||||||
|
|
||||||
connect(ProjectExplorer::SessionManager::instance(),
|
connect(ProjectExplorer::SessionManager::instance(),
|
||||||
&ProjectExplorer::SessionManager::startupProjectChanged, this, [this] {
|
&ProjectExplorer::SessionManager::startupProjectChanged, this, [this] {
|
||||||
|
|||||||
@@ -86,11 +86,15 @@ ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *p
|
|||||||
this, [this, generalWidget](int index) {
|
this, [this, generalWidget](int index) {
|
||||||
generalWidget->setEnabled(index != 0);
|
generalWidget->setEnabled(index != 0);
|
||||||
m_projectSettings->setUseGlobalSettings(index == 0);
|
m_projectSettings->setUseGlobalSettings(index == 0);
|
||||||
|
m_syncFrameworksTimer.start(3000);
|
||||||
});
|
});
|
||||||
connect(m_activeFrameworks, &QTreeWidget::itemChanged,
|
connect(m_activeFrameworks, &QTreeWidget::itemChanged,
|
||||||
this, &ProjectTestSettingsWidget::onActiveFrameworkChanged);
|
this, &ProjectTestSettingsWidget::onActiveFrameworkChanged);
|
||||||
connect(m_runAfterBuild, &QCheckBox::toggled,
|
connect(m_runAfterBuild, &QCheckBox::toggled,
|
||||||
m_projectSettings, &TestProjectSettings::setRunAfterBuild);
|
m_projectSettings, &TestProjectSettings::setRunAfterBuild);
|
||||||
|
m_syncFrameworksTimer.setSingleShot(true);
|
||||||
|
connect(&m_syncFrameworksTimer, &QTimer::timeout,
|
||||||
|
TestTreeModel::instance(), &TestTreeModel::synchronizeTestFrameworks);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectTestSettingsWidget::populateFrameworks(const QMap<Core::Id, bool> &frameworks)
|
void ProjectTestSettingsWidget::populateFrameworks(const QMap<Core::Id, bool> &frameworks)
|
||||||
@@ -110,6 +114,7 @@ void ProjectTestSettingsWidget::onActiveFrameworkChanged(QTreeWidgetItem *item,
|
|||||||
{
|
{
|
||||||
auto id = Core::Id::fromSetting(item->data(column, FrameworkIdRole));
|
auto id = Core::Id::fromSetting(item->data(column, FrameworkIdRole));
|
||||||
m_projectSettings->activateFramework(id, item->data(0, Qt::CheckStateRole) == Qt::Checked);
|
m_projectSettings->activateFramework(id, item->data(0, Qt::CheckStateRole) == Qt::Checked);
|
||||||
|
m_syncFrameworksTimer.start(3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <QTimer>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@@ -55,6 +56,7 @@ private:
|
|||||||
QComboBox *m_useGlobalSettings = nullptr;
|
QComboBox *m_useGlobalSettings = nullptr;
|
||||||
QTreeWidget *m_activeFrameworks = nullptr;
|
QTreeWidget *m_activeFrameworks = nullptr;
|
||||||
QCheckBox *m_runAfterBuild = nullptr;
|
QCheckBox *m_runAfterBuild = nullptr;
|
||||||
|
QTimer m_syncFrameworksTimer;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -206,6 +206,7 @@ void TestCodeParser::onQmlDocumentUpdated(const QmlJS::Document::Ptr &document)
|
|||||||
|
|
||||||
void TestCodeParser::onStartupProjectChanged(Project *project)
|
void TestCodeParser::onStartupProjectChanged(Project *project)
|
||||||
{
|
{
|
||||||
|
m_model->synchronizeTestFrameworks(); // we might have project settings
|
||||||
if (m_parserState == FullParse || m_parserState == PartialParse) {
|
if (m_parserState == FullParse || m_parserState == PartialParse) {
|
||||||
qCDebug(LOG) << "Canceling scanForTest (startup project changed)";
|
qCDebug(LOG) << "Canceling scanForTest (startup project changed)";
|
||||||
Core::ProgressManager::instance()->cancelTasks(Constants::TASK_PARSE);
|
Core::ProgressManager::instance()->cancelTasks(Constants::TASK_PARSE);
|
||||||
|
|||||||
@@ -56,14 +56,12 @@ void TestProjectSettings::setUseGlobalSettings(bool useGlobal)
|
|||||||
if (m_useGlobalSettings == useGlobal)
|
if (m_useGlobalSettings == useGlobal)
|
||||||
return;
|
return;
|
||||||
m_useGlobalSettings = useGlobal;
|
m_useGlobalSettings = useGlobal;
|
||||||
TestTreeModel::instance()->scheduleTestFrameworksSync(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestProjectSettings::activateFramework(const Core::Id &id, bool activate)
|
void TestProjectSettings::activateFramework(const Core::Id &id, bool activate)
|
||||||
{
|
{
|
||||||
if (m_activeTestFrameworks.value(id) != activate) {
|
if (m_activeTestFrameworks.value(id) != activate) {
|
||||||
m_activeTestFrameworks[id] = activate;
|
m_activeTestFrameworks[id] = activate;
|
||||||
TestTreeModel::instance()->scheduleTestFrameworksSync(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ void TestSettingsPage::apply()
|
|||||||
m_settings->toSettings(Core::ICore::settings());
|
m_settings->toSettings(Core::ICore::settings());
|
||||||
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
||||||
frameworkManager->activateFrameworksFromSettings(m_settings);
|
frameworkManager->activateFrameworksFromSettings(m_settings);
|
||||||
TestTreeModel::instance()->scheduleTestFrameworksSync(true);
|
TestTreeModel::instance()->synchronizeTestFrameworks();
|
||||||
if (!changedIds.isEmpty())
|
if (!changedIds.isEmpty())
|
||||||
TestTreeModel::instance()->rebuild(changedIds);
|
TestTreeModel::instance()->rebuild(changedIds);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,11 +56,6 @@ TestTreeModel::TestTreeModel(QObject *parent) :
|
|||||||
connect(m_parser, &TestCodeParser::parsingFailed,
|
connect(m_parser, &TestCodeParser::parsingFailed,
|
||||||
this, &TestTreeModel::sweep, Qt::QueuedConnection);
|
this, &TestTreeModel::sweep, Qt::QueuedConnection);
|
||||||
|
|
||||||
connect(ProjectExplorer::SessionManager::instance(),
|
|
||||||
&ProjectExplorer::SessionManager::startupProjectChanged,
|
|
||||||
this, &TestTreeModel::onStartupProjectChanged);
|
|
||||||
m_syncFrameworksTimer.setSingleShot(true);
|
|
||||||
connect(&m_syncFrameworksTimer, &QTimer::timeout, this, &TestTreeModel::syncTestFrameworks);
|
|
||||||
setupParsingConnections();
|
setupParsingConnections();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,17 +201,15 @@ QList<TestTreeItem *> TestTreeModel::testItemsByName(const QString &testName)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestTreeModel::syncTestFrameworks()
|
void TestTreeModel::synchronizeTestFrameworks()
|
||||||
{
|
{
|
||||||
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
||||||
if (!project)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QList<Core::Id> sortedIds;
|
QList<Core::Id> sortedIds;
|
||||||
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
|
TestFrameworkManager *manager = TestFrameworkManager::instance();
|
||||||
const QVariant useGlobal = project->namedSettings(Constants::SK_USE_GLOBAL);
|
const QVariant useGlobal = project ? project->namedSettings(Constants::SK_USE_GLOBAL)
|
||||||
|
: QVariant();
|
||||||
if (!useGlobal.isValid() || AutotestPlugin::projectSettings(project)->useGlobalSettings()) {
|
if (!useGlobal.isValid() || AutotestPlugin::projectSettings(project)->useGlobalSettings()) {
|
||||||
sortedIds = frameworkManager->sortedActiveFrameworkIds();
|
sortedIds = manager->sortedActiveFrameworkIds();
|
||||||
} 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<Core::Id, bool> active = settings->activeFrameworks();
|
const QMap<Core::Id, bool> active = settings->activeFrameworks();
|
||||||
@@ -225,17 +218,6 @@ void TestTreeModel::syncTestFrameworks()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
syncFrameworks(sortedIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestTreeModel::scheduleTestFrameworksSync(bool immediately)
|
|
||||||
{
|
|
||||||
m_syncFrameworksTimer.start(immediately ? 0 : 3000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestTreeModel::syncFrameworks(const QList<Core::Id> &sortedIds)
|
|
||||||
{
|
|
||||||
TestFrameworkManager *manager = TestFrameworkManager::instance();
|
|
||||||
// pre-check to avoid further processing when frameworks are unchanged
|
// pre-check to avoid further processing when frameworks are unchanged
|
||||||
Utils::TreeItem *invisibleRoot = rootItem();
|
Utils::TreeItem *invisibleRoot = rootItem();
|
||||||
const int count = invisibleRoot->childCount();
|
const int count = invisibleRoot->childCount();
|
||||||
@@ -474,12 +456,6 @@ void TestTreeModel::onParseResultReady(const TestParseResultPtr result)
|
|||||||
handleParseResult(result.data(), rootNode);
|
handleParseResult(result.data(), rootNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestTreeModel::onStartupProjectChanged()
|
|
||||||
{
|
|
||||||
m_syncFrameworksTimer.stop();
|
|
||||||
scheduleTestFrameworksSync(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeItem *parentNode)
|
void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeItem *parentNode)
|
||||||
{
|
{
|
||||||
const bool groupingEnabled =
|
const bool groupingEnabled =
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
#include <utils/treemodel.h>
|
#include <utils/treemodel.h>
|
||||||
|
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QTimer>
|
|
||||||
|
|
||||||
namespace Autotest {
|
namespace Autotest {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -59,7 +58,7 @@ public:
|
|||||||
QList<TestConfiguration *> getSelectedTests() const;
|
QList<TestConfiguration *> getSelectedTests() const;
|
||||||
QList<TestConfiguration *> getTestsForFile(const Utils::FilePath &fileName) const;
|
QList<TestConfiguration *> getTestsForFile(const Utils::FilePath &fileName) const;
|
||||||
QList<TestTreeItem *> testItemsByName(const QString &testName);
|
QList<TestTreeItem *> testItemsByName(const QString &testName);
|
||||||
void scheduleTestFrameworksSync(bool immediately);
|
void synchronizeTestFrameworks();
|
||||||
void rebuild(const QList<Core::Id> &frameworkIds);
|
void rebuild(const QList<Core::Id> &frameworkIds);
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
@@ -88,7 +87,6 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void onParseResultReady(const TestParseResultPtr result);
|
void onParseResultReady(const TestParseResultPtr result);
|
||||||
void onStartupProjectChanged();
|
|
||||||
void handleParseResult(const TestParseResult *result, TestTreeItem *rootNode);
|
void handleParseResult(const TestParseResult *result, TestTreeItem *rootNode);
|
||||||
void removeAllTestItems();
|
void removeAllTestItems();
|
||||||
void removeTestRootNodes();
|
void removeTestRootNodes();
|
||||||
@@ -99,12 +97,9 @@ private:
|
|||||||
explicit TestTreeModel(QObject *parent = nullptr);
|
explicit TestTreeModel(QObject *parent = nullptr);
|
||||||
void setupParsingConnections();
|
void setupParsingConnections();
|
||||||
void filterAndInsert(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled);
|
void filterAndInsert(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled);
|
||||||
void syncTestFrameworks();
|
|
||||||
void syncFrameworks(const QList<Core::Id> &sortedIds);
|
|
||||||
QList<TestTreeItem *> testItemsByName(TestTreeItem *root, const QString &testName);
|
QList<TestTreeItem *> testItemsByName(TestTreeItem *root, const QString &testName);
|
||||||
|
|
||||||
Internal::TestCodeParser *m_parser = nullptr;
|
Internal::TestCodeParser *m_parser = nullptr;
|
||||||
QTimer m_syncFrameworksTimer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|||||||
Reference in New Issue
Block a user