forked from qt-creator/qt-creator
Autotest: Move Test{FrameWorkManager,Runner} singletons
Make them plugin-pimpl data members, removing some indirections. Change-Id: Ie441ac94a27f07342513b0b5b1437ccfe4b5d7d2 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -89,7 +89,6 @@ public:
|
||||
AutotestPluginPrivate();
|
||||
~AutotestPluginPrivate() override;
|
||||
|
||||
TestFrameworkManager *m_frameworkManager = nullptr;
|
||||
TestNavigationWidgetFactory *m_navigationWidgetFactory = nullptr;
|
||||
TestResultsPane *m_resultsPane = nullptr;
|
||||
QMap<QString, ChoicePair> m_runconfigCache;
|
||||
@@ -105,6 +104,8 @@ public:
|
||||
|
||||
TestCodeParser m_testCodeParser;
|
||||
TestTreeModel m_testTreeModel{&m_testCodeParser};
|
||||
TestRunner m_testRunner;
|
||||
TestFrameworkManager m_frameworkManager;
|
||||
};
|
||||
|
||||
static AutotestPluginPrivate *dd = nullptr;
|
||||
@@ -127,14 +128,13 @@ AutotestPlugin::~AutotestPlugin()
|
||||
AutotestPluginPrivate::AutotestPluginPrivate()
|
||||
{
|
||||
dd = this; // Needed as the code below access it via the static plugin interface
|
||||
m_frameworkManager = TestFrameworkManager::instance();
|
||||
initializeMenuEntries();
|
||||
m_frameworkManager->registerTestFramework(new QtTestFramework);
|
||||
m_frameworkManager->registerTestFramework(new QuickTestFramework);
|
||||
m_frameworkManager->registerTestFramework(new GTestFramework);
|
||||
m_frameworkManager->registerTestFramework(new BoostTestFramework);
|
||||
m_frameworkManager.registerTestFramework(new QtTestFramework);
|
||||
m_frameworkManager.registerTestFramework(new QuickTestFramework);
|
||||
m_frameworkManager.registerTestFramework(new GTestFramework);
|
||||
m_frameworkManager.registerTestFramework(new BoostTestFramework);
|
||||
|
||||
m_frameworkManager->synchronizeSettings(ICore::settings());
|
||||
m_frameworkManager.synchronizeSettings(ICore::settings());
|
||||
m_navigationWidgetFactory = new TestNavigationWidgetFactory;
|
||||
m_resultsPane = TestResultsPane::instance();
|
||||
|
||||
@@ -147,7 +147,7 @@ AutotestPluginPrivate::AutotestPluginPrivate()
|
||||
});
|
||||
ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory);
|
||||
|
||||
m_frameworkManager->activateFrameworksFromSettings(&m_settings);
|
||||
m_frameworkManager.activateFrameworksFromSettings(&m_settings);
|
||||
m_testTreeModel.synchronizeTestFrameworks();
|
||||
|
||||
auto sessionManager = ProjectExplorer::SessionManager::instance();
|
||||
@@ -173,7 +173,6 @@ AutotestPluginPrivate::~AutotestPluginPrivate()
|
||||
|
||||
delete m_navigationWidgetFactory;
|
||||
delete m_resultsPane;
|
||||
delete m_frameworkManager;
|
||||
}
|
||||
|
||||
TestSettings *AutotestPlugin::settings()
|
||||
@@ -298,16 +297,14 @@ ExtensionSystem::IPlugin::ShutdownFlag AutotestPlugin::aboutToShutdown()
|
||||
|
||||
void AutotestPluginPrivate::onRunAllTriggered()
|
||||
{
|
||||
TestRunner *runner = TestRunner::instance();
|
||||
runner->setSelectedTests(m_testTreeModel.getAllTestCases());
|
||||
runner->prepareToRunTests(TestRunMode::Run);
|
||||
m_testRunner.setSelectedTests(m_testTreeModel.getAllTestCases());
|
||||
m_testRunner.prepareToRunTests(TestRunMode::Run);
|
||||
}
|
||||
|
||||
void AutotestPluginPrivate::onRunSelectedTriggered()
|
||||
{
|
||||
TestRunner *runner = TestRunner::instance();
|
||||
runner->setSelectedTests(m_testTreeModel.getSelectedTests());
|
||||
runner->prepareToRunTests(TestRunMode::Run);
|
||||
m_testRunner.setSelectedTests(m_testTreeModel.getSelectedTests());
|
||||
m_testRunner.prepareToRunTests(TestRunMode::Run);
|
||||
}
|
||||
|
||||
void AutotestPluginPrivate::onRunFileTriggered()
|
||||
@@ -324,9 +321,8 @@ void AutotestPluginPrivate::onRunFileTriggered()
|
||||
if (tests.isEmpty())
|
||||
return;
|
||||
|
||||
TestRunner *runner = TestRunner::instance();
|
||||
runner->setSelectedTests(tests);
|
||||
runner->prepareToRunTests(TestRunMode::Run);
|
||||
m_testRunner.setSelectedTests(tests);
|
||||
m_testRunner.prepareToRunTests(TestRunMode::Run);
|
||||
}
|
||||
|
||||
static QList<TestConfiguration *> testItemsToTestConfigurations(const QList<TestTreeItem *> &items,
|
||||
@@ -368,16 +364,15 @@ void AutotestPluginPrivate::onRunUnderCursorTriggered(TestRunMode mode)
|
||||
return;
|
||||
}
|
||||
|
||||
auto runner = TestRunner::instance();
|
||||
runner->setSelectedTests(testsToRun);
|
||||
runner->prepareToRunTests(mode);
|
||||
m_testRunner.setSelectedTests(testsToRun);
|
||||
m_testRunner.prepareToRunTests(mode);
|
||||
}
|
||||
|
||||
void AutotestPlugin::updateMenuItemsEnabledState()
|
||||
{
|
||||
const ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
||||
const ProjectExplorer::Target *target = project ? project->activeTarget() : nullptr;
|
||||
const bool canScan = !TestRunner::instance()->isTestRunning()
|
||||
const bool canScan = !dd->m_testRunner.isTestRunning()
|
||||
&& dd->m_testCodeParser.state() == TestCodeParser::Idle;
|
||||
const bool hasTests = dd->m_testTreeModel.hasTests();
|
||||
// avoid expensive call to PE::canRunStartupProject() - limit to minimum necessary checks
|
||||
|
@@ -28,7 +28,6 @@
|
||||
#include "autotestplugin.h"
|
||||
#include "iframeworksettings.h"
|
||||
#include "itestparser.h"
|
||||
#include "testrunner.h"
|
||||
#include "testsettings.h"
|
||||
#include "testtreeitem.h"
|
||||
#include "testtreemodel.h"
|
||||
@@ -51,21 +50,18 @@ static TestFrameworkManager *s_instance = nullptr;
|
||||
|
||||
TestFrameworkManager::TestFrameworkManager()
|
||||
{
|
||||
m_testRunner = Internal::TestRunner::instance();
|
||||
s_instance = this;
|
||||
}
|
||||
|
||||
TestFrameworkManager *TestFrameworkManager::instance()
|
||||
{
|
||||
if (!s_instance)
|
||||
return new TestFrameworkManager;
|
||||
return s_instance;
|
||||
}
|
||||
|
||||
TestFrameworkManager::~TestFrameworkManager()
|
||||
{
|
||||
delete m_testRunner;
|
||||
qDeleteAll(m_registeredFrameworks);
|
||||
s_instance = nullptr;
|
||||
}
|
||||
|
||||
bool TestFrameworkManager::registerTestFramework(ITestFramework *framework)
|
||||
|
@@ -37,18 +37,20 @@ namespace Core { class Id; }
|
||||
|
||||
namespace Autotest {
|
||||
namespace Internal {
|
||||
class TestRunner;
|
||||
struct TestSettings;
|
||||
}
|
||||
|
||||
class IFrameworkSettings;
|
||||
class ITestParser;
|
||||
|
||||
class TestFrameworkManager
|
||||
class TestFrameworkManager final
|
||||
{
|
||||
|
||||
public:
|
||||
TestFrameworkManager();
|
||||
~TestFrameworkManager();
|
||||
|
||||
static TestFrameworkManager *instance();
|
||||
virtual ~TestFrameworkManager();
|
||||
|
||||
static ITestFramework *frameworkForId(Core::Id frameworkId);
|
||||
|
||||
@@ -65,10 +67,8 @@ public:
|
||||
|
||||
private:
|
||||
TestFrameworks activeFrameworks() const;
|
||||
explicit TestFrameworkManager();
|
||||
|
||||
TestFrameworks m_registeredFrameworks;
|
||||
Internal::TestRunner *m_testRunner;
|
||||
};
|
||||
|
||||
} // namespace Autotest
|
||||
|
@@ -82,14 +82,13 @@ static TestRunner *s_instance = nullptr;
|
||||
|
||||
TestRunner *TestRunner::instance()
|
||||
{
|
||||
if (!s_instance)
|
||||
s_instance = new TestRunner;
|
||||
return s_instance;
|
||||
}
|
||||
|
||||
TestRunner::TestRunner(QObject *parent) :
|
||||
QObject(parent)
|
||||
TestRunner::TestRunner()
|
||||
{
|
||||
s_instance = this;
|
||||
|
||||
connect(&m_futureWatcher, &QFutureWatcher<TestResultPtr>::resultReadyAt,
|
||||
this, [this](int index) { emit testResultReady(m_futureWatcher.resultAt(index)); });
|
||||
connect(&m_futureWatcher, &QFutureWatcher<TestResultPtr>::finished,
|
||||
|
@@ -53,14 +53,17 @@ enum class TestRunMode;
|
||||
|
||||
namespace Internal {
|
||||
|
||||
class AUTOTESTSHARED_EXPORT TestRunner : public QObject
|
||||
class AUTOTESTSHARED_EXPORT TestRunner final : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TestRunner();
|
||||
~TestRunner() final;
|
||||
|
||||
enum CancelReason { UserCanceled, Timeout, KitChanged };
|
||||
|
||||
static TestRunner* instance();
|
||||
~TestRunner() override;
|
||||
|
||||
void setSelectedTests(const QList<TestConfiguration *> &selected);
|
||||
void runTest(TestRunMode mode, const TestTreeItem *item);
|
||||
@@ -92,7 +95,6 @@ private:
|
||||
void debugTests();
|
||||
void runOrDebugTests();
|
||||
void reportResult(ResultType type, const QString &description);
|
||||
explicit TestRunner(QObject *parent = nullptr);
|
||||
bool postponeTestRunWithEmptyExecutable(ProjectExplorer::Project *project);
|
||||
void onBuildSystemUpdated();
|
||||
|
||||
|
Reference in New Issue
Block a user