aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/autotest/autotestplugin.cpp12
-rw-r--r--src/plugins/autotest/boost/boosttestoutputreader.cpp2
-rw-r--r--src/plugins/autotest/boost/boosttestresult.cpp4
-rw-r--r--src/plugins/autotest/boost/boosttestresult.h2
-rw-r--r--src/plugins/autotest/boost/boosttesttreeitem.cpp16
-rw-r--r--src/plugins/autotest/boost/boosttesttreeitem.h12
-rw-r--r--src/plugins/autotest/catch/catchresult.cpp4
-rw-r--r--src/plugins/autotest/catch/catchresult.h2
-rw-r--r--src/plugins/autotest/catch/catchtreeitem.cpp20
-rw-r--r--src/plugins/autotest/catch/catchtreeitem.h14
-rw-r--r--src/plugins/autotest/gtest/gtestoutputreader.cpp4
-rw-r--r--src/plugins/autotest/gtest/gtestresult.cpp4
-rw-r--r--src/plugins/autotest/gtest/gtestresult.h5
-rw-r--r--src/plugins/autotest/gtest/gtesttreeitem.cpp20
-rw-r--r--src/plugins/autotest/gtest/gtesttreeitem.h14
-rw-r--r--src/plugins/autotest/qtest/qttestoutputreader.cpp8
-rw-r--r--src/plugins/autotest/qtest/qttestresult.cpp6
-rw-r--r--src/plugins/autotest/qtest/qttestresult.h5
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.cpp30
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.h12
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.cpp18
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.h12
-rw-r--r--src/plugins/autotest/testconfiguration.cpp155
-rw-r--r--src/plugins/autotest/testconfiguration.h64
-rw-r--r--src/plugins/autotest/testresult.cpp2
-rw-r--r--src/plugins/autotest/testresult.h4
-rw-r--r--src/plugins/autotest/testresultmodel.cpp2
-rw-r--r--src/plugins/autotest/testresultspane.cpp6
-rw-r--r--src/plugins/autotest/testrunner.cpp145
-rw-r--r--src/plugins/autotest/testrunner.h13
-rw-r--r--src/plugins/autotest/testtreeitem.cpp23
-rw-r--r--src/plugins/autotest/testtreeitem.h17
-rw-r--r--src/plugins/autotest/testtreemodel.cpp18
-rw-r--r--src/plugins/autotest/testtreemodel.h8
34 files changed, 373 insertions, 310 deletions
diff --git a/src/plugins/autotest/autotestplugin.cpp b/src/plugins/autotest/autotestplugin.cpp
index 0c37cdce471..b3d64b050a5 100644
--- a/src/plugins/autotest/autotestplugin.cpp
+++ b/src/plugins/autotest/autotestplugin.cpp
@@ -329,7 +329,7 @@ void AutotestPluginPrivate::onRunSelectedTriggered()
void AutotestPluginPrivate::onRunFailedTriggered()
{
- const QList<TestConfiguration *> failed = m_testTreeModel.getFailedTests();
+ const QList<ITestConfiguration *> failed = m_testTreeModel.getFailedTests();
if (failed.isEmpty()) // the framework might not be able to provide them
return;
m_testRunner.setSelectedTests(failed);
@@ -346,7 +346,7 @@ void AutotestPluginPrivate::onRunFileTriggered()
if (fileName.isEmpty())
return;
- const QList<TestConfiguration *> tests = m_testTreeModel.getTestsForFile(fileName);
+ const QList<ITestConfiguration *> tests = m_testTreeModel.getTestsForFile(fileName);
if (tests.isEmpty())
return;
@@ -354,12 +354,12 @@ void AutotestPluginPrivate::onRunFileTriggered()
m_testRunner.prepareToRunTests(TestRunMode::Run);
}
-static QList<TestConfiguration *> testItemsToTestConfigurations(const QList<TestTreeItem *> &items,
+static QList<ITestConfiguration *> testItemsToTestConfigurations(const QList<TestTreeItem *> &items,
TestRunMode mode)
{
- QList<TestConfiguration *> configs;
+ QList<ITestConfiguration *> configs;
for (const TestTreeItem * item : items) {
- if (TestConfiguration *currentConfig = item->asConfiguration(mode))
+ if (ITestConfiguration *currentConfig = item->asConfiguration(mode))
configs << currentConfig;
}
return configs;
@@ -385,7 +385,7 @@ void AutotestPluginPrivate::onRunUnderCursorTriggered(TestRunMode mode)
return it->line() == line && it->filePath() == filePath;
});
- const QList<TestConfiguration *> testsToRun = testItemsToTestConfigurations(
+ const QList<ITestConfiguration *> testsToRun = testItemsToTestConfigurations(
filteredItems.size() == 1 ? filteredItems : testsItems, mode);
if (testsToRun.isEmpty()) {
diff --git a/src/plugins/autotest/boost/boosttestoutputreader.cpp b/src/plugins/autotest/boost/boosttestoutputreader.cpp
index 8a1a9cccc81..c4ba9f160b9 100644
--- a/src/plugins/autotest/boost/boosttestoutputreader.cpp
+++ b/src/plugins/autotest/boost/boosttestoutputreader.cpp
@@ -108,7 +108,7 @@ void BoostTestOutputReader::sendCompleteInformation()
if (m_lineNumber) {
result->setLine(m_lineNumber);
result->setFileName(m_fileName);
- } else if (const TestTreeItem *it = result->findTestTreeItem()) {
+ } else if (const ITestTreeItem *it = result->findTestTreeItem()) {
result->setLine(it->line());
result->setFileName(it->filePath());
}
diff --git a/src/plugins/autotest/boost/boosttestresult.cpp b/src/plugins/autotest/boost/boosttestresult.cpp
index 95c49ca3e47..f0b83e2cd92 100644
--- a/src/plugins/autotest/boost/boosttestresult.cpp
+++ b/src/plugins/autotest/boost/boosttestresult.cpp
@@ -90,7 +90,7 @@ bool BoostTestResult::isDirectParentOf(const TestResult *other, bool *needsInter
return false;
}
-const TestTreeItem *BoostTestResult::findTestTreeItem() const
+const ITestTreeItem *BoostTestResult::findTestTreeItem() const
{
auto id = Utils::Id(Constants::FRAMEWORK_PREFIX).withSuffix(BoostTest::Constants::FRAMEWORK_NAME);
ITestFramework *framework = TestFrameworkManager::frameworkForId(id);
@@ -102,7 +102,7 @@ const TestTreeItem *BoostTestResult::findTestTreeItem() const
const auto foundItem = rootNode->findAnyChild([this](const Utils::TreeItem *item) {
return matches(static_cast<const BoostTestTreeItem *>(item));
});
- return static_cast<const TestTreeItem *>(foundItem);
+ return static_cast<const ITestTreeItem *>(foundItem);
}
bool BoostTestResult::matches(const BoostTestTreeItem *item) const
diff --git a/src/plugins/autotest/boost/boosttestresult.h b/src/plugins/autotest/boost/boosttestresult.h
index 419942ad178..842afc241cb 100644
--- a/src/plugins/autotest/boost/boosttestresult.h
+++ b/src/plugins/autotest/boost/boosttestresult.h
@@ -39,7 +39,7 @@ public:
const QString outputString(bool selected) const override;
bool isDirectParentOf(const TestResult *other, bool *needsIntermediate) const override;
- const TestTreeItem * findTestTreeItem() const override;
+ const ITestTreeItem * findTestTreeItem() const override;
void setTestSuite(const QString &testSuite) { m_testSuite = testSuite; }
void setTestCase(const QString &testCase) { m_testCase = testCase; }
private:
diff --git a/src/plugins/autotest/boost/boosttesttreeitem.cpp b/src/plugins/autotest/boost/boosttesttreeitem.cpp
index e04650a4e61..f2c44f07f4c 100644
--- a/src/plugins/autotest/boost/boosttesttreeitem.cpp
+++ b/src/plugins/autotest/boost/boosttesttreeitem.cpp
@@ -174,9 +174,9 @@ static QString handleSpecialFunctionNames(const QString &name)
return result;
}
-QList<TestConfiguration *> BoostTestTreeItem::getAllTestConfigurations() const
+QList<ITestConfiguration *> BoostTestTreeItem::getAllTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -216,10 +216,10 @@ QList<TestConfiguration *> BoostTestTreeItem::getAllTestConfigurations() const
return result;
}
-QList<TestConfiguration *> BoostTestTreeItem::getTestConfigurations(
+QList<ITestConfiguration *> BoostTestTreeItem::getTestConfigurations(
std::function<bool(BoostTestTreeItem *)> predicate) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -263,21 +263,21 @@ QList<TestConfiguration *> BoostTestTreeItem::getTestConfigurations(
return result;
}
-QList<TestConfiguration *> BoostTestTreeItem::getSelectedTestConfigurations() const
+QList<ITestConfiguration *> BoostTestTreeItem::getSelectedTestConfigurations() const
{
return getTestConfigurations([](BoostTestTreeItem *it) {
return it->checked() == Qt::Checked;
});
}
-QList<TestConfiguration *> BoostTestTreeItem::getFailedTestConfigurations() const
+QList<ITestConfiguration *> BoostTestTreeItem::getFailedTestConfigurations() const
{
return getTestConfigurations([](BoostTestTreeItem *it) {
return it->data(0, FailedRole).toBool();
});
}
-TestConfiguration *BoostTestTreeItem::testConfiguration() const
+ITestConfiguration *BoostTestTreeItem::testConfiguration() const
{
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
QTC_ASSERT(project, return nullptr);
@@ -320,7 +320,7 @@ TestConfiguration *BoostTestTreeItem::testConfiguration() const
return nullptr;
}
-TestConfiguration *BoostTestTreeItem::debugConfiguration() const
+ITestConfiguration *BoostTestTreeItem::debugConfiguration() const
{
BoostTestConfiguration *config = static_cast<BoostTestConfiguration *>(testConfiguration());
if (config)
diff --git a/src/plugins/autotest/boost/boosttesttreeitem.h b/src/plugins/autotest/boost/boosttesttreeitem.h
index b4f1831699f..15f8c3c113d 100644
--- a/src/plugins/autotest/boost/boosttesttreeitem.h
+++ b/src/plugins/autotest/boost/boosttesttreeitem.h
@@ -69,13 +69,13 @@ public:
void setState(TestState state) { m_state |= state; }
TestStates state() const { return m_state; }
- QList<TestConfiguration *> getAllTestConfigurations() const override;
- QList<TestConfiguration *> getSelectedTestConfigurations() const override;
- QList<TestConfiguration *> getFailedTestConfigurations() const override;
+ QList<ITestConfiguration *> getAllTestConfigurations() const override;
+ QList<ITestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<ITestConfiguration *> getFailedTestConfigurations() const override;
bool canProvideTestConfiguration() const override { return type() != Root; }
bool canProvideDebugConfiguration() const override { return canProvideTestConfiguration(); }
- TestConfiguration *testConfiguration() const override;
- TestConfiguration *debugConfiguration() const override;
+ ITestConfiguration *testConfiguration() const override;
+ ITestConfiguration *debugConfiguration() const override;
private:
QString nameSuffix() const;
@@ -84,7 +84,7 @@ private:
BoostTestTreeItem::TestStates state,
const QString &proFile) const;
QString prependWithParentsSuitePaths(const QString &testName) const;
- QList<TestConfiguration *> getTestConfigurations(
+ QList<ITestConfiguration *> getTestConfigurations(
std::function<bool(BoostTestTreeItem *)> predicate) const;
bool modifyTestContent(const BoostTestParseResult *result);
TestStates m_state = Enabled;
diff --git a/src/plugins/autotest/catch/catchresult.cpp b/src/plugins/autotest/catch/catchresult.cpp
index 03438d1311d..da27010efce 100644
--- a/src/plugins/autotest/catch/catchresult.cpp
+++ b/src/plugins/autotest/catch/catchresult.cpp
@@ -63,7 +63,7 @@ bool CatchResult::isDirectParentOf(const TestResult *other, bool *needsIntermedi
return name() == catchOther->name();
}
-const TestTreeItem *CatchResult::findTestTreeItem() const
+const ITestTreeItem *CatchResult::findTestTreeItem() const
{
auto id = Utils::Id(Constants::FRAMEWORK_PREFIX).withSuffix("Catch");
ITestFramework *framework = TestFrameworkManager::frameworkForId(id);
@@ -82,7 +82,7 @@ const TestTreeItem *CatchResult::findTestTreeItem() const
return parameterized ? tcName.startsWith(treeItem->name() + " - ")
: tcName == treeItem->name();
});
- return static_cast<const TestTreeItem *>(item);
+ return static_cast<const ITestTreeItem *>(item);
}
} // namespace Internal
diff --git a/src/plugins/autotest/catch/catchresult.h b/src/plugins/autotest/catch/catchresult.h
index e8960810847..859e1888540 100644
--- a/src/plugins/autotest/catch/catchresult.h
+++ b/src/plugins/autotest/catch/catchresult.h
@@ -35,7 +35,7 @@ public:
CatchResult(const QString &id, const QString &name);
bool isDirectParentOf(const TestResult *other, bool *needsIntermediate) const override;
- const TestTreeItem *findTestTreeItem() const override;
+ const ITestTreeItem *findTestTreeItem() const override;
void setSectionDepth(int depth) { m_sectionDepth = depth; }
int sectionDepth() const { return m_sectionDepth; }
diff --git a/src/plugins/autotest/catch/catchtreeitem.cpp b/src/plugins/autotest/catch/catchtreeitem.cpp
index eb88a733df4..b12f75b88da 100644
--- a/src/plugins/autotest/catch/catchtreeitem.cpp
+++ b/src/plugins/autotest/catch/catchtreeitem.cpp
@@ -153,7 +153,7 @@ bool CatchTreeItem::canProvideDebugConfiguration() const
return canProvideTestConfiguration();
}
-TestConfiguration *CatchTreeItem::testConfiguration() const
+ITestConfiguration *CatchTreeItem::testConfiguration() const
{
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
QTC_ASSERT(project, return nullptr);
@@ -171,7 +171,7 @@ TestConfiguration *CatchTreeItem::testConfiguration() const
return config;
}
-TestConfiguration *CatchTreeItem::debugConfiguration() const
+ITestConfiguration *CatchTreeItem::debugConfiguration() const
{
CatchConfiguration *config = static_cast<CatchConfiguration *>(testConfiguration());
if (config)
@@ -240,19 +240,19 @@ static void collectFailedTestInfo(const CatchTreeItem *item,
});
}
-QList<TestConfiguration *> CatchTreeItem::getAllTestConfigurations() const
+QList<ITestConfiguration *> CatchTreeItem::getAllTestConfigurations() const
{
return getTestConfigurations(true);
}
-QList<TestConfiguration *> CatchTreeItem::getSelectedTestConfigurations() const
+QList<ITestConfiguration *> CatchTreeItem::getSelectedTestConfigurations() const
{
return getTestConfigurations(false);
}
-QList<TestConfiguration *> CatchTreeItem::getFailedTestConfigurations() const
+QList<ITestConfiguration *> CatchTreeItem::getFailedTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -274,9 +274,9 @@ QList<TestConfiguration *> CatchTreeItem::getFailedTestConfigurations() const
return result;
}
-QList<TestConfiguration *> CatchTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const
+QList<ITestConfiguration *> CatchTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -318,9 +318,9 @@ QString CatchTreeItem::stateSuffix() const
return types.isEmpty() ? QString() : QString(" [" + types.join(", ") + ']');
}
-QList<TestConfiguration *> CatchTreeItem::getTestConfigurations(bool ignoreCheckState) const
+QList<ITestConfiguration *> CatchTreeItem::getTestConfigurations(bool ignoreCheckState) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
diff --git a/src/plugins/autotest/catch/catchtreeitem.h b/src/plugins/autotest/catch/catchtreeitem.h
index fe0c4e5dbad..5b8b339dc6a 100644
--- a/src/plugins/autotest/catch/catchtreeitem.h
+++ b/src/plugins/autotest/catch/catchtreeitem.h
@@ -59,16 +59,16 @@ public:
bool canProvideTestConfiguration() const override;
bool canProvideDebugConfiguration() const override;
- TestConfiguration *testConfiguration() const override;
- TestConfiguration *debugConfiguration() const override;
- QList<TestConfiguration *> getAllTestConfigurations() const override;
- QList<TestConfiguration *> getSelectedTestConfigurations() const override;
- QList<TestConfiguration *> getFailedTestConfigurations() const override;
- QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
+ ITestConfiguration *testConfiguration() const override;
+ ITestConfiguration *debugConfiguration() const override;
+ QList<ITestConfiguration *> getAllTestConfigurations() const override;
+ QList<ITestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<ITestConfiguration *> getFailedTestConfigurations() const override;
+ QList<ITestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
private:
QString stateSuffix() const;
- QList<TestConfiguration *> getTestConfigurations(bool ignoreCheckState) const;
+ QList<ITestConfiguration *> getTestConfigurations(bool ignoreCheckState) const;
TestStates m_state = Normal;
};
diff --git a/src/plugins/autotest/gtest/gtestoutputreader.cpp b/src/plugins/autotest/gtest/gtestoutputreader.cpp
index c2c1b2f3ac1..270a297704f 100644
--- a/src/plugins/autotest/gtest/gtestoutputreader.cpp
+++ b/src/plugins/autotest/gtest/gtestoutputreader.cpp
@@ -202,11 +202,11 @@ TestResultPtr GTestOutputReader::createDefaultResult() const
result->setTestCaseName(m_currentTestCase);
result->setIteration(m_iteration);
- const TestTreeItem *testItem = result->findTestTreeItem();
+ const ITestTreeItem *testItem = result->findTestTreeItem();
if (testItem && testItem->line()) {
result->setFileName(testItem->filePath());
- result->setLine(static_cast<int>(testItem->line()));
+ result->setLine(testItem->line());
}
return TestResultPtr(result);
diff --git a/src/plugins/autotest/gtest/gtestresult.cpp b/src/plugins/autotest/gtest/gtestresult.cpp
index ce0481b95a5..acc265a70cb 100644
--- a/src/plugins/autotest/gtest/gtestresult.cpp
+++ b/src/plugins/autotest/gtest/gtestresult.cpp
@@ -94,7 +94,7 @@ static QString normalizeTestName(const QString &testname)
return normalizeName(nameWithoutTypeParam);
}
-const TestTreeItem *GTestResult::findTestTreeItem() const
+const ITestTreeItem *GTestResult::findTestTreeItem() const
{
auto id = Utils::Id(Constants::FRAMEWORK_PREFIX).withSuffix(GTest::Constants::FRAMEWORK_NAME);
ITestFramework *framework = TestFrameworkManager::frameworkForId(id);
@@ -107,7 +107,7 @@ const TestTreeItem *GTestResult::findTestTreeItem() const
const auto treeItem = static_cast<const TestTreeItem *>(item);
return treeItem && matches(treeItem);
});
- return static_cast<const TestTreeItem *>(item);
+ return static_cast<const ITestTreeItem *>(item);
}
bool GTestResult::matches(const TestTreeItem *treeItem) const
diff --git a/src/plugins/autotest/gtest/gtestresult.h b/src/plugins/autotest/gtest/gtestresult.h
index a7922133278..6fc1728629c 100644
--- a/src/plugins/autotest/gtest/gtestresult.h
+++ b/src/plugins/autotest/gtest/gtestresult.h
@@ -28,6 +28,9 @@
#include "../testresult.h"
namespace Autotest {
+
+class TestTreeItem;
+
namespace Internal {
class GTestResult : public TestResult
@@ -39,7 +42,7 @@ public:
void setTestCaseName(const QString &testSetName) { m_testCaseName = testSetName; }
void setIteration(int iteration) { m_iteration = iteration; }
bool isDirectParentOf(const TestResult *other, bool *needsIntermediate) const override;
- virtual const TestTreeItem *findTestTreeItem() const override;
+ virtual const ITestTreeItem *findTestTreeItem() const override;
private:
bool isTestSuite() const { return m_testCaseName.isEmpty(); }
diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp
index 44bb6bef9ce..c372fe03f9e 100644
--- a/src/plugins/autotest/gtest/gtesttreeitem.cpp
+++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp
@@ -162,7 +162,7 @@ QVariant GTestTreeItem::data(int column, int role) const
return TestTreeItem::data(column, role);
}
-TestConfiguration *GTestTreeItem::testConfiguration() const
+ITestConfiguration *GTestTreeItem::testConfiguration() const
{
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
QTC_ASSERT(project, return nullptr);
@@ -199,7 +199,7 @@ TestConfiguration *GTestTreeItem::testConfiguration() const
return config;
}
-TestConfiguration *GTestTreeItem::debugConfiguration() const
+ITestConfiguration *GTestTreeItem::debugConfiguration() const
{
GTestConfiguration *config = static_cast<GTestConfiguration *>(testConfiguration());
if (config)
@@ -267,9 +267,9 @@ static void collectFailedTestInfo(const GTestTreeItem *item,
});
}
-QList<TestConfiguration *> GTestTreeItem::getTestConfigurations(bool ignoreCheckState) const
+QList<ITestConfiguration *> GTestTreeItem::getTestConfigurations(bool ignoreCheckState) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -296,19 +296,19 @@ QList<TestConfiguration *> GTestTreeItem::getTestConfigurations(bool ignoreCheck
return result;
}
-QList<TestConfiguration *> GTestTreeItem::getAllTestConfigurations() const
+QList<ITestConfiguration *> GTestTreeItem::getAllTestConfigurations() const
{
return getTestConfigurations(true);
}
-QList<TestConfiguration *> GTestTreeItem::getSelectedTestConfigurations() const
+QList<ITestConfiguration *> GTestTreeItem::getSelectedTestConfigurations() const
{
return getTestConfigurations(false);
}
-QList<TestConfiguration *> GTestTreeItem::getFailedTestConfigurations() const
+QList<ITestConfiguration *> GTestTreeItem::getFailedTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -331,9 +331,9 @@ QList<TestConfiguration *> GTestTreeItem::getFailedTestConfigurations() const
return result;
}
-QList<TestConfiguration *> GTestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const
+QList<ITestConfiguration *> GTestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
diff --git a/src/plugins/autotest/gtest/gtesttreeitem.h b/src/plugins/autotest/gtest/gtesttreeitem.h
index 560b244e52d..35edc4313f5 100644
--- a/src/plugins/autotest/gtest/gtesttreeitem.h
+++ b/src/plugins/autotest/gtest/gtesttreeitem.h
@@ -57,12 +57,12 @@ public:
QVariant data(int column, int role) const override;
bool canProvideTestConfiguration() const override { return type() != Root; }
bool canProvideDebugConfiguration() const override { return type() != Root; }
- TestConfiguration *testConfiguration() const override;
- TestConfiguration *debugConfiguration() const override;
- QList<TestConfiguration *> getAllTestConfigurations() const override;
- QList<TestConfiguration *> getSelectedTestConfigurations() const override;
- QList<TestConfiguration *> getFailedTestConfigurations() const override;
- QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
+ ITestConfiguration *testConfiguration() const override;
+ ITestConfiguration *debugConfiguration() const override;
+ QList<ITestConfiguration *> getAllTestConfigurations() const override;
+ QList<ITestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<ITestConfiguration *> getFailedTestConfigurations() const override;
+ QList<ITestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
TestTreeItem *find(const TestParseResult *result) override;
TestTreeItem *findChild(const TestTreeItem *other) override;
bool modify(const TestParseResult *result) override;
@@ -82,7 +82,7 @@ public:
bool shouldBeAddedAfterFiltering() const override;
private:
bool modifyTestSetContent(const GTestParseResult *result);
- QList<TestConfiguration *> getTestConfigurations(bool ignoreCheckState) const;
+ QList<ITestConfiguration *> getTestConfigurations(bool ignoreCheckState) const;
GTestTreeItem::TestStates m_state;
};
diff --git a/src/plugins/autotest/qtest/qttestoutputreader.cpp b/src/plugins/autotest/qtest/qttestoutputreader.cpp
index b262ade27d8..32e9221bec7 100644
--- a/src/plugins/autotest/qtest/qttestoutputreader.cpp
+++ b/src/plugins/autotest/qtest/qttestoutputreader.cpp
@@ -479,10 +479,10 @@ void QtTestOutputReader::sendCompleteInformation()
testResult->setFileName(m_file);
testResult->setLine(m_lineNumber);
} else {
- const TestTreeItem *testItem = testResult->findTestTreeItem();
+ const ITestTreeItem *testItem = testResult->findTestTreeItem();
if (testItem && testItem->line()) {
testResult->setFileName(testItem->filePath());
- testResult->setLine(static_cast<int>(testItem->line()));
+ testResult->setLine(testItem->line());
}
}
testResult->setDescription(m_description);
@@ -503,10 +503,10 @@ void QtTestOutputReader::sendStartMessage(bool isFunction)
testResult->setResult(ResultType::TestStart);
testResult->setDescription(isFunction ? tr("Executing test function %1").arg(m_testCase)
: tr("Executing test case %1").arg(m_className));
- const TestTreeItem *testItem = testResult->findTestTreeItem();
+ const ITestTreeItem *testItem = testResult->findTestTreeItem();
if (testItem && testItem->line()) {
testResult->setFileName(testItem->filePath());
- testResult->setLine(static_cast<int>(testItem->line()));
+ testResult->setLine(testItem->line());
}
reportResult(testResult);
}
diff --git a/src/plugins/autotest/qtest/qttestresult.cpp b/src/plugins/autotest/qtest/qttestresult.cpp
index 9aeffe414d3..67865d4aa61 100644
--- a/src/plugins/autotest/qtest/qttestresult.cpp
+++ b/src/plugins/autotest/qtest/qttestresult.cpp
@@ -124,12 +124,12 @@ TestResult *QtTestResult::createIntermediateResultFor(const TestResult *other)
const auto correspondingItem = intermediate->findTestTreeItem();
if (correspondingItem && correspondingItem->line()) {
intermediate->setFileName(correspondingItem->filePath());
- intermediate->setLine(static_cast<int>(correspondingItem->line()));
+ intermediate->setLine(correspondingItem->line());
}
return intermediate;
}
-const TestTreeItem *QtTestResult::findTestTreeItem() const
+const ITestTreeItem *QtTestResult::findTestTreeItem() const
{
Utils::Id id;
if (m_type == TestType::QtTest)
@@ -145,7 +145,7 @@ const TestTreeItem *QtTestResult::findTestTreeItem() const
const TestTreeItem *treeItem = static_cast<const TestTreeItem *>(item);
return treeItem && matches(treeItem);
});
- return static_cast<const TestTreeItem *>(item);
+ return static_cast<const ITestTreeItem *>(item);
}
bool QtTestResult::matches(const TestTreeItem *item) const
diff --git a/src/plugins/autotest/qtest/qttestresult.h b/src/plugins/autotest/qtest/qttestresult.h
index f3f653cd1af..e2c1ae2e672 100644
--- a/src/plugins/autotest/qtest/qttestresult.h
+++ b/src/plugins/autotest/qtest/qttestresult.h
@@ -29,6 +29,9 @@
#include "qttestconstants.h"
namespace Autotest {
+
+class TestTreeItem;
+
namespace Internal {
class QtTestResult : public TestResult
@@ -44,7 +47,7 @@ public:
bool isDirectParentOf(const TestResult *other, bool *needsIntermediate) const override;
bool isIntermediateFor(const TestResult *other) const override;
TestResult *createIntermediateResultFor(const TestResult *other) override;
- const TestTreeItem *findTestTreeItem() const override;
+ const ITestTreeItem *findTestTreeItem() const override;
private:
bool isTestCase() const { return m_function.isEmpty() && m_dataTag.isEmpty(); }
bool isTestFunction() const { return !m_function.isEmpty() && m_dataTag.isEmpty(); }
diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp
index 8448a4ce265..9e5513733c1 100644
--- a/src/plugins/autotest/qtest/qttesttreeitem.cpp
+++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp
@@ -107,7 +107,7 @@ bool QtTestTreeItem::canProvideDebugConfiguration() const
return canProvideTestConfiguration();
}
-TestConfiguration *QtTestTreeItem::testConfiguration() const
+ITestConfiguration *QtTestTreeItem::testConfiguration() const
{
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
QTC_ASSERT(project, return nullptr);
@@ -149,7 +149,7 @@ TestConfiguration *QtTestTreeItem::testConfiguration() const
}
static void fillTestConfigurationsFromCheckState(const TestTreeItem *item,
- QList<TestConfiguration *> &testConfigurations)
+ QList<ITestConfiguration *> &testConfigurations)
{
QTC_ASSERT(item, return);
if (item->type() == TestTreeItem::GroupNode) {
@@ -190,7 +190,7 @@ static void fillTestConfigurationsFromCheckState(const TestTreeItem *item,
}
}
-static void collectFailedTestInfo(TestTreeItem *item, QList<TestConfiguration *> &testConfigs)
+static void collectFailedTestInfo(TestTreeItem *item, QList<ITestConfiguration *> &testConfigs)
{
QTC_ASSERT(item, return);
if (item->type() == TestTreeItem::GroupNode) {
@@ -221,7 +221,7 @@ static void collectFailedTestInfo(TestTreeItem *item, QList<TestConfiguration *>
testConfigs << testConfig;
}
-TestConfiguration *QtTestTreeItem::debugConfiguration() const
+ITestConfiguration *QtTestTreeItem::debugConfiguration() const
{
QtTestConfiguration *config = static_cast<QtTestConfiguration *>(testConfiguration());
if (config)
@@ -229,9 +229,9 @@ TestConfiguration *QtTestTreeItem::debugConfiguration() const
return config;
}
-QList<TestConfiguration *> QtTestTreeItem::getAllTestConfigurations() const
+QList<ITestConfiguration *> QtTestTreeItem::getAllTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
@@ -239,12 +239,12 @@ QList<TestConfiguration *> QtTestTreeItem::getAllTestConfigurations() const
forFirstLevelChildren([&result](ITestTreeItem *child) {
if (child->type() == TestCase) {
- TestConfiguration *tc = child->testConfiguration();
+ ITestConfiguration *tc = child->testConfiguration();
QTC_ASSERT(tc, return);
result << tc;
} else if (child->type() == GroupNode) {
child->forFirstLevelChildren([&result](ITestTreeItem *groupChild) {
- TestConfiguration *tc = groupChild->testConfiguration();
+ ITestConfiguration *tc = groupChild->testConfiguration();
QTC_ASSERT(tc, return);
result << tc;
});
@@ -253,9 +253,9 @@ QList<TestConfiguration *> QtTestTreeItem::getAllTestConfigurations() const
return result;
}
-QList<TestConfiguration *> QtTestTreeItem::getSelectedTestConfigurations() const
+QList<ITestConfiguration *> QtTestTreeItem::getSelectedTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
return result;
@@ -266,18 +266,18 @@ QList<TestConfiguration *> QtTestTreeItem::getSelectedTestConfigurations() const
return result;
}
-QList<TestConfiguration *> QtTestTreeItem::getFailedTestConfigurations() const
+QList<ITestConfiguration *> QtTestTreeItem::getFailedTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
QTC_ASSERT(type() == TestTreeItem::Root, return result);
for (int row = 0, end = childCount(); row < end; ++row)
collectFailedTestInfo(childItem(row), result);
return result;
}
-QList<TestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const
+QList<ITestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
@@ -295,7 +295,7 @@ QList<TestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Ut
});
for (auto it = testFunctions.cbegin(), end = testFunctions.cend(); it != end; ++it) {
- TestConfiguration *tc = it.key()->testConfiguration();
+ TestConfiguration *tc = static_cast<TestConfiguration *>(it.key()->testConfiguration());
QTC_ASSERT(tc, continue);
tc->setTestCases(it.value());
result << tc;
diff --git a/src/plugins/autotest/qtest/qttesttreeitem.h b/src/plugins/autotest/qtest/qttesttreeitem.h
index 0628d977fc8..9ad6c10f165 100644
--- a/src/plugins/autotest/qtest/qttesttreeitem.h
+++ b/src/plugins/autotest/qtest/qttesttreeitem.h
@@ -41,12 +41,12 @@ public:
Qt::ItemFlags flags(int column) const override;
bool canProvideTestConfiguration() const override;
bool canProvideDebugConfiguration() const override;
- TestConfiguration *testConfiguration() const override;
- TestConfiguration *debugConfiguration() const override;
- QList<TestConfiguration *> getAllTestConfigurations() const override;
- QList<TestConfiguration *> getSelectedTestConfigurations() const override;
- QList<TestConfiguration *> getFailedTestConfigurations() const override;
- QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
+ ITestConfiguration *testConfiguration() const override;
+ ITestConfiguration *debugConfiguration() const override;
+ QList<ITestConfiguration *> getAllTestConfigurations() const override;
+ QList<ITestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<ITestConfiguration *> getFailedTestConfigurations() const override;
+ QList<ITestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
TestTreeItem *find(const TestParseResult *result) override;
TestTreeItem *findChild(const TestTreeItem *other) override;
bool modify(const TestParseResult *result) override;
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp
index 08ad05966d1..9f2944f0ac7 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.cpp
+++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp
@@ -123,7 +123,7 @@ bool QuickTestTreeItem::canProvideDebugConfiguration() const
return canProvideTestConfiguration();
}
-TestConfiguration *QuickTestTreeItem::testConfiguration() const
+ITestConfiguration *QuickTestTreeItem::testConfiguration() const
{
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
QTC_ASSERT(project, return nullptr);
@@ -160,7 +160,7 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const
return config;
}
-static QList<TestConfiguration *> testConfigurationsFor(
+static QList<ITestConfiguration *> testConfigurationsFor(
const TestTreeItem *rootNode, const std::function<bool(TestTreeItem *)> &predicate)
{
QTC_ASSERT(rootNode, return {});
@@ -197,10 +197,10 @@ static QList<TestConfiguration *> testConfigurationsFor(
return false;
});
- return Utils::static_container_cast<TestConfiguration *>(configurationForProFiles.values());
+ return Utils::static_container_cast<ITestConfiguration *>(configurationForProFiles.values());
}
-TestConfiguration *QuickTestTreeItem::debugConfiguration() const
+ITestConfiguration *QuickTestTreeItem::debugConfiguration() const
{
QuickTestConfiguration *config = static_cast<QuickTestConfiguration *>(testConfiguration());
if (config)
@@ -219,9 +219,9 @@ static void addTestsForItem(Tests &tests, const TestTreeItem *item)
tests.internalTargets = item->internalTargets();
}
-QList<TestConfiguration *> QuickTestTreeItem::getAllTestConfigurations() const
+QList<ITestConfiguration *> QuickTestTreeItem::getAllTestConfigurations() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
if (!project || type() != Root)
@@ -259,21 +259,21 @@ QList<TestConfiguration *> QuickTestTreeItem::getAllTestConfigurations() const
return result;
}
-QList<TestConfiguration *> QuickTestTreeItem::getSelectedTestConfigurations() const
+QList<ITestConfiguration *> QuickTestTreeItem::getSelectedTestConfigurations() const
{
return testConfigurationsFor(this, [](TestTreeItem *it) {
return it->checked() == Qt::Checked && it->type() == TestTreeItem::TestFunction;
});
}
-QList<TestConfiguration *> QuickTestTreeItem::getFailedTestConfigurations() const
+QList<ITestConfiguration *> QuickTestTreeItem::getFailedTestConfigurations() const
{
return testConfigurationsFor(this, [](TestTreeItem *it) {
return it->data(0, FailedRole).toBool();
});
}
-QList<TestConfiguration *> QuickTestTreeItem::getTestConfigurationsForFile(
+QList<ITestConfiguration *> QuickTestTreeItem::getTestConfigurationsForFile(
const Utils::FilePath &fileName) const
{
const QString &file = fileName.toString();
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h
index 47199a9fe24..3cbae53ba43 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.h
+++ b/src/plugins/autotest/quick/quicktesttreeitem.h
@@ -45,12 +45,12 @@ public:
Qt::ItemFlags flags(int column) const override;
bool canProvideTestConfiguration() const override;
bool canProvideDebugConfiguration() const override;
- TestConfiguration *testConfiguration() const override;
- TestConfiguration *debugConfiguration() const override;
- QList<TestConfiguration *> getAllTestConfigurations() const override;
- QList<TestConfiguration *> getSelectedTestConfigurations() const override;
- QList<TestConfiguration *> getFailedTestConfigurations() const override;
- QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
+ ITestConfiguration *testConfiguration() const override;
+ ITestConfiguration *debugConfiguration() const override;
+ QList<ITestConfiguration *> getAllTestConfigurations() const override;
+ QList<ITestConfiguration *> getSelectedTestConfigurations() const override;
+ QList<ITestConfiguration *> getFailedTestConfigurations() const override;
+ QList<ITestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override;
TestTreeItem *find(const TestParseResult *result) override;
TestTreeItem *findChild(const TestTreeItem *other) override;
bool modify(const TestParseResult *result) override;
diff --git a/src/plugins/autotest/testconfiguration.cpp b/src/plugins/autotest/testconfiguration.cpp
index 61de8a6720c..636c37a8789 100644
--- a/src/plugins/autotest/testconfiguration.cpp
+++ b/src/plugins/autotest/testconfiguration.cpp
@@ -25,6 +25,7 @@
#include "testconfiguration.h"
+#include "itestframework.h"
#include "testoutputreader.h"
#include "testrunconfiguration.h"
@@ -50,8 +51,59 @@ using namespace Utils;
namespace Autotest {
+
+ITestConfiguration::ITestConfiguration(Autotest::ITestBase *testBase)
+ : m_testBase(testBase)
+{
+}
+
+void ITestConfiguration::setWorkingDirectory(const QString &workingDirectory)
+{
+ m_runnable.workingDirectory = workingDirectory;
+}
+
+QString ITestConfiguration::workingDirectory() const
+{
+ if (!m_runnable.workingDirectory.isEmpty()) {
+ const QFileInfo info(m_runnable.workingDirectory);
+ if (info.isDir()) // ensure wanted working dir does exist
+ return info.absoluteFilePath();
+ }
+
+ const QString executable = executableFilePath();
+ return executable.isEmpty() ? executable : QFileInfo(executable).absolutePath();
+}
+
+bool ITestConfiguration::hasExecutable() const
+{
+ return !m_runnable.executable.isEmpty();
+}
+
+QString ITestConfiguration::executableFilePath() const
+{
+ if (!hasExecutable())
+ return QString();
+
+ QFileInfo commandFileInfo = m_runnable.executable.toFileInfo();
+ if (commandFileInfo.isExecutable() && commandFileInfo.path() != ".") {
+ return commandFileInfo.absoluteFilePath();
+ } else if (commandFileInfo.path() == "."){
+ QString fullCommandFileName = m_runnable.executable.toString();
+ // TODO: check if we can use searchInPath() from Utils::Environment
+ const QStringList &pathList = m_runnable.environment.toProcessEnvironment().value("PATH")
+ .split(Utils::HostOsInfo::pathListSeparator());
+
+ for (const QString &path : pathList) {
+ QString filePath(path + QDir::separator() + fullCommandFileName);
+ if (QFileInfo(filePath).isExecutable())
+ return commandFileInfo.absoluteFilePath();
+ }
+ }
+ return QString();
+}
+
TestConfiguration::TestConfiguration(ITestFramework *framework)
- : m_framework(framework)
+ : ITestConfiguration(framework)
{
}
@@ -77,17 +129,17 @@ void TestConfiguration::completeTestInformation(ProjectExplorer::RunConfiguratio
TestRunMode runMode)
{
QTC_ASSERT(rc, return);
- QTC_ASSERT(m_project, return);
+ QTC_ASSERT(project(), return);
if (hasExecutable()) {
qCDebug(LOG) << "Executable has been set already - not completing configuration again.";
return;
}
- Project *project = SessionManager::startupProject();
- if (!project || project != m_project)
+ Project *startupProject = SessionManager::startupProject();
+ if (!startupProject || startupProject != project())
return;
- Target *target = project->activeTarget();
+ Target *target = startupProject->activeTarget();
if (!target)
return;
@@ -95,7 +147,7 @@ void TestConfiguration::completeTestInformation(ProjectExplorer::RunConfiguratio
return;
m_runnable = rc->runnable();
- m_displayName = rc->displayName();
+ setDisplayName(rc->displayName());
BuildTargetInfo targetInfo = rc->buildTargetInfo();
if (!targetInfo.targetFilePath.isEmpty())
@@ -104,7 +156,7 @@ void TestConfiguration::completeTestInformation(ProjectExplorer::RunConfiguratio
QString buildBase;
if (auto buildConfig = target->activeBuildConfiguration()) {
buildBase = buildConfig->buildDirectory().toString();
- const QString projBase = m_project->projectDirectory().toString();
+ const QString projBase = startupProject->projectDirectory().toString();
if (m_projectFile.startsWith(projBase))
m_buildDir = QFileInfo(buildBase + m_projectFile.mid(projBase.length())).absolutePath();
}
@@ -116,7 +168,7 @@ void TestConfiguration::completeTestInformation(TestRunMode runMode)
{
QTC_ASSERT(!m_projectFile.isEmpty(), return);
QTC_ASSERT(!m_buildTargets.isEmpty(), return);
- QTC_ASSERT(m_project, return);
+ QTC_ASSERT(project(), return);
if (m_origRunConfig) {
qCDebug(LOG) << "Using run configuration specified by user or found by first call";
@@ -129,13 +181,13 @@ void TestConfiguration::completeTestInformation(TestRunMode runMode)
}
qCDebug(LOG) << "Failed to complete - using 'normal' way.";
}
- Project *project = SessionManager::startupProject();
- if (!project || project != m_project) {
- m_project = nullptr;
+ Project *startupProject = SessionManager::startupProject();
+ if (!startupProject || startupProject != project()) {
+ setProject(nullptr);
return;
}
- Target *target = project->activeTarget();
+ Target *target = startupProject->activeTarget();
if (!target)
return;
qCDebug(LOG) << "ActiveTargetName\n " << target->displayName();
@@ -171,7 +223,7 @@ void TestConfiguration::completeTestInformation(TestRunMode runMode)
QString buildBase;
if (auto buildConfig = target->activeBuildConfiguration()) {
buildBase = buildConfig->buildDirectory().toString();
- const QString projBase = project->projectDirectory().toString();
+ const QString projBase = startupProject->projectDirectory().toString();
if (m_projectFile.startsWith(projBase))
m_buildDir = QFileInfo(buildBase + m_projectFile.mid(projBase.length())).absolutePath();
}
@@ -211,7 +263,7 @@ void TestConfiguration::completeTestInformation(TestRunMode runMode)
m_origRunConfig = runConfig;
m_runnable = runnable;
m_runnable.executable = currentExecutable;
- m_displayName = runConfig->displayName();
+ setDisplayName(runConfig->displayName());
if (runMode == TestRunMode::Debug || runMode == TestRunMode::DebugWithoutDeploy)
m_runConfig = new Internal::TestRunConfiguration(target, this);
break;
@@ -224,7 +276,7 @@ void TestConfiguration::completeTestInformation(TestRunMode runMode)
// before installation) to have at least something to execute
if (!hasExecutable() && !localExecutable.isEmpty())
m_runnable.executable = localExecutable;
- if (m_displayName.isEmpty() && hasExecutable()) {
+ if (displayName().isEmpty() && hasExecutable()) {
qCDebug(LOG) << " Fallback";
// we failed to find a valid runconfiguration - but we've got the executable already
if (auto rc = target->activeRunConfiguration()) {
@@ -242,8 +294,8 @@ void TestConfiguration::completeTestInformation(TestRunMode runMode)
}
}
- if (m_displayName.isEmpty()) // happens e.g. when deducing the TestConfiguration or error
- m_displayName = (*buildSystemTargets.begin());
+ if (displayName().isEmpty()) // happens e.g. when deducing the TestConfiguration or error
+ setDisplayName(*buildSystemTargets.begin());
}
/**
@@ -258,12 +310,7 @@ void TestConfiguration::setTestCases(const QStringList &testCases)
{
m_testCases.clear();
m_testCases << testCases;
- m_testCaseCount = m_testCases.size();
-}
-
-void TestConfiguration::setTestCaseCount(int count)
-{
- m_testCaseCount = count;
+ setTestCaseCount(m_testCases.size());
}
void TestConfiguration::setExecutableFile(const QString &executableFile)
@@ -276,31 +323,11 @@ void TestConfiguration::setProjectFile(const QString &projectFile)
m_projectFile = projectFile;
}
-void TestConfiguration::setWorkingDirectory(const QString &workingDirectory)
-{
- m_runnable.workingDirectory = workingDirectory;
-}
-
void TestConfiguration::setBuildDirectory(const QString &buildDirectory)
{
m_buildDir = buildDirectory;
}
-void TestConfiguration::setDisplayName(const QString &displayName)
-{
- m_displayName = displayName;
-}
-
-void TestConfiguration::setEnvironment(const Utils::Environment &env)
-{
- m_runnable.environment = env;
-}
-
-void TestConfiguration::setProject(Project *project)
-{
- m_project = project;
-}
-
void TestConfiguration::setInternalTarget(const QString &target)
{
m_buildTargets.clear();
@@ -317,54 +344,14 @@ void TestConfiguration::setOriginalRunConfiguration(RunConfiguration *runConfig)
m_origRunConfig = runConfig;
}
-QString TestConfiguration::executableFilePath() const
-{
- if (!hasExecutable())
- return QString();
-
- QFileInfo commandFileInfo = m_runnable.executable.toFileInfo();
- if (commandFileInfo.isExecutable() && commandFileInfo.path() != ".") {
- return commandFileInfo.absoluteFilePath();
- } else if (commandFileInfo.path() == "."){
- QString fullCommandFileName = m_runnable.executable.toString();
- // TODO: check if we can use searchInPath() from Utils::Environment
- const QStringList &pathList = m_runnable.environment.toProcessEnvironment().value("PATH")
- .split(Utils::HostOsInfo::pathListSeparator());
-
- foreach (const QString &path, pathList) {
- QString filePath(path + QDir::separator() + fullCommandFileName);
- if (QFileInfo(filePath).isExecutable())
- return commandFileInfo.absoluteFilePath();
- }
- }
- return QString();
-}
-
-QString TestConfiguration::workingDirectory() const
-{
- if (!m_runnable.workingDirectory.isEmpty()) {
- const QFileInfo info(m_runnable.workingDirectory);
- if (info.isDir()) // ensure wanted working dir does exist
- return info.absoluteFilePath();
- }
-
- const QString executable = executableFilePath();
- return executable.isEmpty() ? executable : QFileInfo(executable).absolutePath();
-}
-
bool DebuggableTestConfiguration::isDebugRunMode() const
{
return m_runMode == TestRunMode::Debug || m_runMode == TestRunMode::DebugWithoutDeploy;
}
-bool TestConfiguration::hasExecutable() const
-{
- return !m_runnable.executable.isEmpty();
-}
-
ITestFramework *TestConfiguration::framework() const
{
- return m_framework;
+ return static_cast<ITestFramework *>(testBase());
}
} // namespace Autotest
diff --git a/src/plugins/autotest/testconfiguration.h b/src/plugins/autotest/testconfiguration.h
index 842ef50f43c..b24e436f273 100644
--- a/src/plugins/autotest/testconfiguration.h
+++ b/src/plugins/autotest/testconfiguration.h
@@ -44,6 +44,7 @@ namespace Internal {
class TestRunConfiguration;
} // namespace Internal
+class ITestBase;
class ITestFramework;
class TestOutputReader;
class TestResult;
@@ -51,66 +52,81 @@ enum class TestRunMode;
using TestResultPtr = QSharedPointer<TestResult>;
-class TestConfiguration
+class ITestConfiguration
+{
+public:
+ explicit ITestConfiguration(ITestBase *testBase);
+ virtual ~ITestConfiguration() = default;
+
+ void setEnvironment(const Utils::Environment &env) { m_runnable.environment = env; }
+ Utils::Environment environment() const { return m_runnable.environment; }
+ void setWorkingDirectory(const QString &workingDirectory);
+ QString workingDirectory() const;
+ bool hasExecutable() const;
+ QString executableFilePath() const;
+
+ virtual TestOutputReader *outputReader(const QFutureInterface<TestResultPtr> &fi,
+ QProcess *app) const = 0;
+ virtual Utils::Environment filteredEnvironment(const Utils::Environment &original) const = 0;
+
+ ITestBase *testBase() const { return m_testBase; }
+ void setProject(ProjectExplorer::Project *project) { m_project = project; }
+ void setDisplayName(const QString &displayName) { m_displayName = displayName; }
+ QString displayName() const { return m_displayName; }
+ void setTestCaseCount(int count) { m_testCaseCount = count; }
+ int testCaseCount() const { return m_testCaseCount; }
+ ProjectExplorer::Project *project() const { return m_project.data(); }
+ ProjectExplorer::Runnable runnable() const { return m_runnable; }
+
+protected:
+ ProjectExplorer::Runnable m_runnable;
+
+private:
+ ITestBase *m_testBase = nullptr;
+ QPointer<ProjectExplorer::Project> m_project;
+ QString m_displayName;
+ int m_testCaseCount = 0;
+};
+
+class TestConfiguration : public ITestConfiguration
{
public:
explicit TestConfiguration(ITestFramework *framework);
- virtual ~TestConfiguration();
+ ~TestConfiguration() override;
void completeTestInformation(TestRunMode runMode);
void completeTestInformation(ProjectExplorer::RunConfiguration *rc, TestRunMode runMode);
void setTestCases(const QStringList &testCases);
- void setTestCaseCount(int count);
void setExecutableFile(const QString &executableFile);
void setProjectFile(const QString &projectFile);
- void setWorkingDirectory(const QString &workingDirectory);
void setBuildDirectory(const QString &buildDirectory);
- void setDisplayName(const QString &displayName);
- void setEnvironment(const Utils::Environment &env);
- void setProject(ProjectExplorer::Project *project);
void setInternalTarget(const QString &target);
void setInternalTargets(const QSet<QString> &targets);
void setOriginalRunConfiguration(ProjectExplorer::RunConfiguration *runConfig);
ITestFramework *framework() const;
QStringList testCases() const { return m_testCases; }
- int testCaseCount() const { return m_testCaseCount; }
- QString executableFilePath() const;
- QString workingDirectory() const;
QString buildDirectory() const { return m_buildDir; }
QString projectFile() const { return m_projectFile; }
- QString displayName() const { return m_displayName; }
- Utils::Environment environment() const { return m_runnable.environment; }
- ProjectExplorer::Project *project() const { return m_project.data(); }
QSet<QString> internalTargets() const { return m_buildTargets; }
ProjectExplorer::RunConfiguration *originalRunConfiguration() const { return m_origRunConfig; }
Internal::TestRunConfiguration *runConfiguration() const { return m_runConfig; }
- bool hasExecutable() const;
bool isDeduced() const { return m_deducedConfiguration; }
QString runConfigDisplayName() const { return m_deducedConfiguration ? m_deducedFrom
- : m_displayName; }
+ : displayName(); }
- ProjectExplorer::Runnable runnable() const { return m_runnable; }
- virtual TestOutputReader *outputReader(const QFutureInterface<TestResultPtr> &fi,
- QProcess *app) const = 0;
virtual QStringList argumentsForTestRunner(QStringList *omitted = nullptr) const = 0;
- virtual Utils::Environment filteredEnvironment(const Utils::Environment &original) const = 0;
private:
- ITestFramework *m_framework;
QStringList m_testCases;
- int m_testCaseCount = 0;
QString m_projectFile;
QString m_buildDir;
- QString m_displayName;
QString m_deducedFrom;
- QPointer<ProjectExplorer::Project> m_project;
bool m_deducedConfiguration = false;
Internal::TestRunConfiguration *m_runConfig = nullptr;
QSet<QString> m_buildTargets;
ProjectExplorer::RunConfiguration *m_origRunConfig = nullptr;
- ProjectExplorer::Runnable m_runnable;
};
class DebuggableTestConfiguration : public TestConfiguration
diff --git a/src/plugins/autotest/testresult.cpp b/src/plugins/autotest/testresult.cpp
index 41bf70dfbeb..1fa294dfa9a 100644
--- a/src/plugins/autotest/testresult.cpp
+++ b/src/plugins/autotest/testresult.cpp
@@ -43,7 +43,7 @@ const QString TestResult::outputString(bool selected) const
return selected ? m_description : m_description.split('\n').first();
}
-const TestTreeItem *TestResult::findTestTreeItem() const
+const ITestTreeItem *TestResult::findTestTreeItem() const
{
return nullptr;
}
diff --git a/src/plugins/autotest/testresult.h b/src/plugins/autotest/testresult.h
index 6bdcaa57483..af8ba7e450b 100644
--- a/src/plugins/autotest/testresult.h
+++ b/src/plugins/autotest/testresult.h
@@ -34,7 +34,7 @@
namespace Autotest {
-class TestTreeItem;
+class ITestTreeItem;
enum class ResultType {
// result types (have icon, color, short text)
@@ -86,7 +86,7 @@ public:
virtual ~TestResult() {}
virtual const QString outputString(bool selected) const;
- virtual const TestTreeItem *findTestTreeItem() const;
+ virtual const ITestTreeItem *findTestTreeItem() const;
QString id() const { return m_id; }
QString name() const { return m_name; }
diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp
index 6c0c68cc279..ca316626418 100644
--- a/src/plugins/autotest/testresultmodel.cpp
+++ b/src/plugins/autotest/testresultmodel.cpp
@@ -322,7 +322,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
}
if (isFailed(testResult->result())) {
- if (const TestTreeItem *it = testResult->findTestTreeItem()) {
+ if (const ITestTreeItem *it = testResult->findTestTreeItem()) {
TestTreeModel *model = TestTreeModel::instance();
model->setData(model->indexForItem(it), true, FailedRole);
}
diff --git a/src/plugins/autotest/testresultspane.cpp b/src/plugins/autotest/testresultspane.cpp
index b693e5032b5..cf8a1afa193 100644
--- a/src/plugins/autotest/testresultspane.cpp
+++ b/src/plugins/autotest/testresultspane.cpp
@@ -631,7 +631,9 @@ void TestResultsPane::onCustomContextMenuRequested(const QPoint &pos)
menu.addAction(action);
action = new QAction(tr("Debug This Test"), &menu);
- action->setEnabled(correlatingItem && correlatingItem->canProvideDebugConfiguration());
+ // FIXME limit to Test Frameworks
+ auto testTreeItem = static_cast<const TestTreeItem *>(correlatingItem);
+ action->setEnabled(testTreeItem && testTreeItem->canProvideDebugConfiguration());
connect(action, &QAction::triggered, this, [this, clicked] {
onRunThisTestTriggered(TestRunMode::Debug, clicked);
});
@@ -681,7 +683,7 @@ void TestResultsPane::onRunThisTestTriggered(TestRunMode runMode, const TestResu
{
QTC_ASSERT(result, return);
- const TestTreeItem *item = result->findTestTreeItem();
+ const ITestTreeItem *item = result->findTestTreeItem();
if (item)
TestRunner::instance()->runTest(runMode, item);
diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp
index 89c8db6d170..49ceb637ee3 100644
--- a/src/plugins/autotest/testrunner.cpp
+++ b/src/plugins/autotest/testrunner.cpp
@@ -27,6 +27,7 @@
#include "autotestconstants.h"
#include "autotestplugin.h"
+#include "itestframework.h"
#include "testoutputreader.h"
#include "testprojectsettings.h"
#include "testresultspane.h"
@@ -111,7 +112,7 @@ TestRunner::~TestRunner()
s_instance = nullptr;
}
-void TestRunner::setSelectedTests(const QList<TestConfiguration *> &selected)
+void TestRunner::setSelectedTests(const QList<ITestConfiguration *> &selected)
{
QTC_ASSERT(!m_executingTests, return);
qDeleteAll(m_selectedTests);
@@ -119,10 +120,10 @@ void TestRunner::setSelectedTests(const QList<TestConfiguration *> &selected)
m_selectedTests.append(selected);
}
-void TestRunner::runTest(TestRunMode mode, const TestTreeItem *item)
+void TestRunner::runTest(TestRunMode mode, const ITestTreeItem *item)
{
QTC_ASSERT(!m_executingTests, return);
- TestConfiguration *configuration = item->asConfiguration(mode);
+ ITestConfiguration *configuration = item->asConfiguration(mode);
if (configuration) {
setSelectedTests({configuration});
@@ -145,14 +146,16 @@ static QString processInformation(const QProcess *proc)
return information;
}
-static QString rcInfo(const TestConfiguration * const config)
+static QString rcInfo(const ITestConfiguration * const config)
{
+ // FIXME early return for test tools
+ const TestConfiguration *current = static_cast<const TestConfiguration *>(config);
QString info;
- if (config->isDeduced())
+ if (current->isDeduced())
info = TestRunner::tr("\nRun configuration: deduced from \"%1\"");
else
info = TestRunner::tr("\nRun configuration: \"%1\"");
- return info.arg(config->runConfigDisplayName());
+ return info.arg(current->runConfigDisplayName());
}
static QString constructOmittedDetailsString(const QStringList &omitted)
@@ -170,6 +173,71 @@ static QString constructOmittedVariablesDetailsString(const Utils::EnvironmentIt
+ '\n' + removedVars.join('\n');
}
+bool TestRunner::currentConfigValid()
+{
+ if (true) { // FIXME do this for frameworks
+ TestConfiguration *current = static_cast<TestConfiguration *>(m_currentConfig);
+ QString commandFilePath = current->executableFilePath();
+ if (commandFilePath.isEmpty()) {
+ reportResult(ResultType::MessageFatal,
+ tr("Executable path is empty. (%1)").arg(current->displayName()));
+ delete m_currentConfig;
+ m_currentConfig = nullptr;
+ if (m_selectedTests.isEmpty()) {
+ if (m_fakeFutureInterface)
+ m_fakeFutureInterface->reportFinished();
+ onFinished();
+ } else {
+ onProcessFinished();
+ }
+ return false;
+ }
+ return true;
+ }
+ // FIXME check TestTools as well
+ return false;
+}
+
+void TestRunner::setUpProcess()
+{
+ QTC_ASSERT(m_currentConfig, return);
+ if (true) { // FIXME do this for frameworks
+ TestConfiguration *current = static_cast<TestConfiguration *>(m_currentConfig);
+ m_currentProcess = new QProcess;
+ m_currentProcess->setReadChannel(QProcess::StandardOutput);
+ m_currentProcess->setProgram(current->executableFilePath());
+ }
+ // FIXME prepare for TestTools as well
+}
+
+void TestRunner::setUpProcessEnv()
+{
+ if (true) { // do this for frameworks
+ TestConfiguration *current = static_cast<TestConfiguration *>(m_currentConfig);
+
+ QStringList omitted;
+ m_currentProcess->setArguments(current->argumentsForTestRunner(&omitted));
+ if (!omitted.isEmpty()) {
+ const QString &details = constructOmittedDetailsString(omitted);
+ reportResult(ResultType::MessageWarn, details.arg(current->displayName()));
+ }
+ m_currentProcess->setWorkingDirectory(current->workingDirectory());
+ const Utils::Environment &original = current->environment();
+ Utils::Environment environment = current->filteredEnvironment(original);
+ const Utils::EnvironmentItems removedVariables = Utils::filtered(
+ original.diff(environment), [](const Utils::EnvironmentItem &it) {
+ return it.operation == Utils::EnvironmentItem::Unset;
+ });
+ if (!removedVariables.isEmpty()) {
+ const QString &details = constructOmittedVariablesDetailsString(removedVariables)
+ .arg(current->displayName());
+ reportResult(ResultType::MessageWarn, details);
+ }
+ m_currentProcess->setProcessEnvironment(environment.toProcessEnvironment());
+ }
+ // FIXME prepare for TestTools as well
+}
+
void TestRunner::scheduleNext()
{
QTC_ASSERT(!m_selectedTests.isEmpty(), onFinished(); return);
@@ -179,28 +247,14 @@ void TestRunner::scheduleNext()
m_currentConfig = m_selectedTests.dequeue();
- QString commandFilePath = m_currentConfig->executableFilePath();
- if (commandFilePath.isEmpty()) {
- reportResult(ResultType::MessageFatal,
- tr("Executable path is empty. (%1)").arg(m_currentConfig->displayName()));
- delete m_currentConfig;
- m_currentConfig = nullptr;
- if (m_selectedTests.isEmpty()) {
- if (m_fakeFutureInterface)
- m_fakeFutureInterface->reportFinished();
- onFinished();
- } else {
- onProcessFinished();
- }
+ if (!currentConfigValid())
return;
- }
+
if (!m_currentConfig->project())
onProcessFinished();
- m_currentProcess = new QProcess;
- m_currentProcess->setReadChannel(QProcess::StandardOutput);
- m_currentProcess->setProgram(commandFilePath);
-
+ setUpProcess();
+ QTC_ASSERT(m_currentProcess, onProcessFinished(); return);
QTC_ASSERT(!m_currentOutputReader, delete m_currentOutputReader);
m_currentOutputReader = m_currentConfig->outputReader(*m_fakeFutureInterface, m_currentProcess);
QTC_ASSERT(m_currentOutputReader, onProcessFinished();return);
@@ -208,26 +262,7 @@ void TestRunner::scheduleNext()
connect(m_currentOutputReader, &TestOutputReader::newOutputLineAvailable,
TestResultsPane::instance(), &TestResultsPane::addOutputLine);
-
- QStringList omitted;
- m_currentProcess->setArguments(m_currentConfig->argumentsForTestRunner(&omitted));
- if (!omitted.isEmpty()) {
- const QString &details = constructOmittedDetailsString(omitted);
- reportResult(ResultType::MessageWarn, details.arg(m_currentConfig->displayName()));
- }
- m_currentProcess->setWorkingDirectory(m_currentConfig->workingDirectory());
- const Utils::Environment &original = m_currentConfig->environment();
- Utils::Environment environment = m_currentConfig->filteredEnvironment(original);
- const Utils::EnvironmentItems removedVariables = Utils::filtered(
- original.diff(environment), [](const Utils::EnvironmentItem &it) {
- return it.operation == Utils::EnvironmentItem::Unset;
- });
- if (!removedVariables.isEmpty()) {
- const QString &details = constructOmittedVariablesDetailsString(removedVariables)
- .arg(m_currentConfig->displayName());
- reportResult(ResultType::MessageWarn, details);
- }
- m_currentProcess->setProcessEnvironment(environment.toProcessEnvironment());
+ setUpProcessEnv();
connect(m_currentProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, &TestRunner::onProcessFinished);
@@ -432,7 +467,9 @@ int TestRunner::precheckTestConfigurations()
{
const bool omitWarnings = AutotestPlugin::settings()->omitRunConfigWarn;
int testCaseCount = 0;
- for (TestConfiguration *config : m_selectedTests) {
+ for (ITestConfiguration *itc : qAsConst(m_selectedTests)) {
+ // FIXME handle test tools
+ TestConfiguration *config = static_cast<TestConfiguration *>(itc);
config->completeTestInformation(TestRunMode::Run);
if (config->project()) {
testCaseCount += config->testCaseCount();
@@ -441,7 +478,7 @@ int TestRunner::precheckTestConfigurations()
"Project's run configuration was deduced for \"%1\".\n"
"This might cause trouble during execution.\n"
"(deduced from \"%2\")");
- message = message.arg(config->displayName()).arg(config->runConfigDisplayName());
+ message = message.arg(config->displayName(), config->runConfigDisplayName());
reportResult(ResultType::MessageWarn, message);
}
} else {
@@ -466,9 +503,11 @@ void TestRunner::onBuildSystemUpdated()
void TestRunner::runTests()
{
- QList<TestConfiguration *> toBeRemoved;
+ QList<ITestConfiguration *> toBeRemoved;
bool projectChanged = false;
- for (TestConfiguration *config : m_selectedTests) {
+ for (ITestConfiguration *itc : qAsConst(m_selectedTests)) {
+ // FIXME handle test tools
+ TestConfiguration *config = static_cast<TestConfiguration *>(itc);
config->completeTestInformation(TestRunMode::Run);
if (!config->project()) {
projectChanged = true;
@@ -480,7 +519,7 @@ void TestRunner::runTests()
toBeRemoved.append(config);
}
}
- for (TestConfiguration *config : toBeRemoved)
+ for (ITestConfiguration *config : toBeRemoved)
m_selectedTests.removeOne(config);
qDeleteAll(toBeRemoved);
toBeRemoved.clear();
@@ -540,7 +579,9 @@ void TestRunner::debugTests()
// TODO improve to support more than one test configuration
QTC_ASSERT(m_selectedTests.size() == 1, onFinished();return);
- TestConfiguration *config = m_selectedTests.first();
+ ITestConfiguration *itc = m_selectedTests.first();
+ // FIXME handle test tools as well
+ TestConfiguration *config = static_cast<TestConfiguration *>(itc);
config->completeTestInformation(TestRunMode::Debug);
if (!config->project()) {
reportResult(ResultType::MessageWarn,
@@ -562,13 +603,11 @@ void TestRunner::debugTests()
const QString &commandFilePath = config->executableFilePath();
if (commandFilePath.isEmpty()) {
reportResult(ResultType::MessageFatal, tr("Could not find command \"%1\". (%2)")
- .arg(config->executableFilePath())
- .arg(config->displayName()));
+ .arg(config->executableFilePath(), config->displayName()));
onFinished();
return;
}
- QString errorMessage;
auto runControl = new RunControl(ProjectExplorer::Constants::DEBUG_RUN_MODE);
runControl->setRunConfiguration(config->runConfiguration());
diff --git a/src/plugins/autotest/testrunner.h b/src/plugins/autotest/testrunner.h
index 5fa4f34eed5..a95a78ab9d5 100644
--- a/src/plugins/autotest/testrunner.h
+++ b/src/plugins/autotest/testrunner.h
@@ -46,7 +46,7 @@ namespace ProjectExplorer { class Project; }
namespace Autotest {
enum class TestRunMode;
-class TestConfiguration;
+class ITestConfiguration;
class TestOutputReader;
namespace Internal {
@@ -63,8 +63,8 @@ public:
static TestRunner* instance();
- void setSelectedTests(const QList<TestConfiguration *> &selected);
- void runTest(TestRunMode mode, const TestTreeItem *item);
+ void setSelectedTests(const QList<ITestConfiguration *> &selected);
+ void runTest(TestRunMode mode, const ITestTreeItem *item);
bool isTestRunning() const { return m_executingTests; }
void prepareToRunTests(TestRunMode mode);
@@ -84,6 +84,9 @@ private:
void onFinished();
int precheckTestConfigurations();
+ bool currentConfigValid();
+ void setUpProcess();
+ void setUpProcessEnv();
void scheduleNext();
void cancelCurrent(CancelReason reason);
void onProcessFinished();
@@ -98,10 +101,10 @@ private:
QFutureWatcher<TestResultPtr> m_futureWatcher;
QFutureInterface<TestResultPtr> *m_fakeFutureInterface = nullptr;
- QQueue<TestConfiguration *> m_selectedTests;
+ QQueue<ITestConfiguration *> m_selectedTests;
bool m_executingTests = false;
bool m_canceled = false;
- TestConfiguration *m_currentConfig = nullptr;
+ ITestConfiguration *m_currentConfig = nullptr;
QProcess *m_currentProcess = nullptr;
TestOutputReader *m_currentOutputReader = nullptr;
TestRunMode m_runMode = TestRunMode::None;
diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp
index 2b54f80fd78..f8888cefc5e 100644
--- a/src/plugins/autotest/testtreeitem.cpp
+++ b/src/plugins/autotest/testtreeitem.cpp
@@ -151,6 +151,17 @@ bool ITestTreeItem::lessThan(const ITestTreeItem *other, ITestTreeItem::SortMode
return true;
}
+ITestConfiguration *ITestTreeItem::asConfiguration(TestRunMode mode) const
+{
+ switch (mode) {
+ case TestRunMode::Run:
+ case TestRunMode::RunWithoutDeploy:
+ return testConfiguration();
+ default:
+ return nullptr;
+ }
+}
+
/****************************** TestTreeItem ********************************************/
TestTreeItem::TestTreeItem(ITestBase *testBase, const QString &name,
@@ -278,24 +289,20 @@ TestTreeItem *TestTreeItem::findChildByNameAndFile(const QString &name, const QS
});
}
-TestConfiguration *TestTreeItem::asConfiguration(TestRunMode mode) const
+ITestConfiguration *TestTreeItem::asConfiguration(TestRunMode mode) const
{
switch (mode) {
- case TestRunMode::Run:
- case TestRunMode::RunWithoutDeploy:
- return testConfiguration();
case TestRunMode::Debug:
case TestRunMode::DebugWithoutDeploy:
return debugConfiguration();
default:
- break;
+ return ITestTreeItem::asConfiguration(mode);
}
- return nullptr;
}
-QList<TestConfiguration *> TestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &) const
+QList<ITestConfiguration *> TestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &) const
{
- return QList<TestConfiguration *>();
+ return QList<ITestConfiguration *>();
}
bool TestTreeItem::isGroupNodeFor(const TestTreeItem *other) const
diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h
index 4e6995869d8..ed5385e573a 100644
--- a/src/plugins/autotest/testtreeitem.h
+++ b/src/plugins/autotest/testtreeitem.h
@@ -49,7 +49,7 @@ namespace Autotest {
class ITestBase;
class ITestFramework;
-class TestConfiguration;
+class ITestConfiguration;
class TestParseResult;
enum class TestRunMode;
@@ -85,11 +85,12 @@ public:
virtual Qt::CheckState checked() const;
virtual bool canProvideTestConfiguration() const { return false; }
- virtual TestConfiguration *testConfiguration() const { return nullptr; }
+ virtual ITestConfiguration *testConfiguration() const { return nullptr; }
+ virtual ITestConfiguration *asConfiguration(TestRunMode mode) const;
- virtual QList<TestConfiguration *> getAllTestConfigurations() const { return {}; }
- virtual QList<TestConfiguration *> getSelectedTestConfigurations() const { return {}; }
- virtual QList<TestConfiguration *> getFailedTestConfigurations() const { return {}; }
+ virtual QList<ITestConfiguration *> getAllTestConfigurations() const { return {}; }
+ virtual QList<ITestConfiguration *> getSelectedTestConfigurations() const { return {}; };
+ virtual QList<ITestConfiguration *> getFailedTestConfigurations() const { return {}; }
const QString name() const { return m_name; }
void setName(const QString &name) { m_name = name; }
@@ -150,10 +151,10 @@ public:
TestTreeItem *findChildByFileAndType(const QString &filePath, Type type);
TestTreeItem *findChildByNameAndFile(const QString &name, const QString &filePath);
- virtual TestConfiguration *debugConfiguration() const { return nullptr; }
+ virtual ITestConfiguration *debugConfiguration() const { return nullptr; }
virtual bool canProvideDebugConfiguration() const { return false; }
- TestConfiguration *asConfiguration(TestRunMode mode) const;
- virtual QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const;
+ ITestConfiguration *asConfiguration(TestRunMode mode) const final;
+ virtual QList<ITestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const;
virtual TestTreeItem *find(const TestParseResult *result) = 0;
virtual TestTreeItem *findChild(const TestTreeItem *other) = 0;
virtual bool modify(const TestParseResult *result) = 0;
diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp
index 84529dd99cb..10938f74cba 100644
--- a/src/plugins/autotest/testtreemodel.cpp
+++ b/src/plugins/autotest/testtreemodel.cpp
@@ -162,33 +162,35 @@ bool TestTreeModel::hasTests() const
return false;
}
-QList<TestConfiguration *> TestTreeModel::getAllTestCases() const
+QList<ITestConfiguration *> TestTreeModel::getAllTestCases() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
for (Utils::TreeItem *frameworkRoot : *rootItem())
result.append(static_cast<ITestTreeItem *>(frameworkRoot)->getAllTestConfigurations());
return result;
}
-QList<TestConfiguration *> TestTreeModel::getSelectedTests() const
+QList<ITestConfiguration *> TestTreeModel::getSelectedTests() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
for (Utils::TreeItem *frameworkRoot : *rootItem())
result.append(static_cast<ITestTreeItem *>(frameworkRoot)->getSelectedTestConfigurations());
return result;
}
-QList<TestConfiguration *> TestTreeModel::getFailedTests() const
+QList<ITestConfiguration *> TestTreeModel::getFailedTests() const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
+ // FIXME limit to frameworks
for (Utils::TreeItem *frameworkRoot : *rootItem())
result.append(static_cast<ITestTreeItem *>(frameworkRoot)->getFailedTestConfigurations());
return result;
}
-QList<TestConfiguration *> TestTreeModel::getTestsForFile(const Utils::FilePath &fileName) const
+QList<ITestConfiguration *> TestTreeModel::getTestsForFile(const Utils::FilePath &fileName) const
{
- QList<TestConfiguration *> result;
+ QList<ITestConfiguration *> result;
+ // FIXME limit to frameworks
for (Utils::TreeItem *frameworkRoot : *rootItem())
result.append(static_cast<TestTreeItem *>(frameworkRoot)->getTestConfigurationsForFile(fileName));
return result;
diff --git a/src/plugins/autotest/testtreemodel.h b/src/plugins/autotest/testtreemodel.h
index f979a5ebdcd..412dde98511 100644
--- a/src/plugins/autotest/testtreemodel.h
+++ b/src/plugins/autotest/testtreemodel.h
@@ -60,10 +60,10 @@ public:
Internal::TestCodeParser *parser() const { return m_parser; }
bool hasTests() const;
- QList<TestConfiguration *> getAllTestCases() const;
- QList<TestConfiguration *> getSelectedTests() const;
- QList<TestConfiguration *> getFailedTests() const;
- QList<TestConfiguration *> getTestsForFile(const Utils::FilePath &fileName) const;
+ QList<ITestConfiguration *> getAllTestCases() const;
+ QList<ITestConfiguration *> getSelectedTests() const;
+ QList<ITestConfiguration *> getFailedTests() const;
+ QList<ITestConfiguration *> getTestsForFile(const Utils::FilePath &fileName) const;
QList<TestTreeItem *> testItemsByName(const QString &testName);
void synchronizeTestFrameworks();
void rebuild(const QList<Utils::Id> &frameworkIds);