forked from qt-creator/qt-creator
AutoTest: Provide basic ctest integration
This allows to have ctest based tests listed inside the test integration and to run them. Task-number: QTCREATORBUG-23332 Change-Id: I1cb855697d7bb4afcd7c887506abdea16c252cb0 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -25,6 +25,10 @@ add_qtc_plugin(AutoTest
|
|||||||
catch/catchtestparser.cpp catch/catchtreeitem.h catch/catchtreeitem.cpp
|
catch/catchtestparser.cpp catch/catchtreeitem.h catch/catchtreeitem.cpp
|
||||||
catch/catchtestsettings.cpp catch/catchtestsettings.h
|
catch/catchtestsettings.cpp catch/catchtestsettings.h
|
||||||
catch/catchtestsettingspage.cpp catch/catchtestsettingspage.h catch/catchtestsettingspage.ui
|
catch/catchtestsettingspage.cpp catch/catchtestsettingspage.h catch/catchtestsettingspage.ui
|
||||||
|
ctest/ctestconfiguration.cpp ctest/ctestconfiguration.h
|
||||||
|
ctest/ctestoutputreader.cpp ctest/ctestoutputreader.h
|
||||||
|
ctest/ctesttool.cpp ctest/ctesttool.h
|
||||||
|
ctest/ctesttreeitem.cpp ctest/ctesttreeitem.h
|
||||||
gtest/gtest_utils.cpp gtest/gtest_utils.h
|
gtest/gtest_utils.cpp gtest/gtest_utils.h
|
||||||
gtest/gtestconfiguration.cpp gtest/gtestconfiguration.h
|
gtest/gtestconfiguration.cpp gtest/gtestconfiguration.h
|
||||||
gtest/gtestconstants.h
|
gtest/gtestconstants.h
|
||||||
|
@@ -7,6 +7,10 @@ DEFINES += AUTOTEST_LIBRARY
|
|||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
autotestplugin.cpp \
|
autotestplugin.cpp \
|
||||||
|
ctest/ctestconfiguration.cpp \
|
||||||
|
ctest/ctestoutputreader.cpp \
|
||||||
|
ctest/ctesttool.cpp \
|
||||||
|
ctest/ctesttreeitem.cpp \
|
||||||
itestframework.cpp \
|
itestframework.cpp \
|
||||||
itestparser.cpp \
|
itestparser.cpp \
|
||||||
projectsettingswidget.cpp \
|
projectsettingswidget.cpp \
|
||||||
@@ -78,6 +82,10 @@ HEADERS += \
|
|||||||
autotestconstants.h \
|
autotestconstants.h \
|
||||||
autotesticons.h \
|
autotesticons.h \
|
||||||
autotestplugin.h \
|
autotestplugin.h \
|
||||||
|
ctest/ctestconfiguration.h \
|
||||||
|
ctest/ctestoutputreader.h \
|
||||||
|
ctest/ctesttool.h \
|
||||||
|
ctest/ctesttreeitem.h \
|
||||||
itemdatacache.h \
|
itemdatacache.h \
|
||||||
itestframework.h \
|
itestframework.h \
|
||||||
itestparser.h \
|
itestparser.h \
|
||||||
|
@@ -120,6 +120,13 @@ QtcPlugin {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Group {
|
||||||
|
name: "CTest support files"
|
||||||
|
files: [
|
||||||
|
"ctest/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Group {
|
Group {
|
||||||
name: "Test sources"
|
name: "Test sources"
|
||||||
condition: qtc.testsEnabled
|
condition: qtc.testsEnabled
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#include "boost/boosttestframework.h"
|
#include "boost/boosttestframework.h"
|
||||||
#include "catch/catchframework.h"
|
#include "catch/catchframework.h"
|
||||||
|
#include "ctest/ctesttool.h"
|
||||||
#include "gtest/gtestframework.h"
|
#include "gtest/gtestframework.h"
|
||||||
#include "qtest/qttestframework.h"
|
#include "qtest/qttestframework.h"
|
||||||
#include "quick/quicktestframework.h"
|
#include "quick/quicktestframework.h"
|
||||||
@@ -141,6 +142,8 @@ AutotestPluginPrivate::AutotestPluginPrivate()
|
|||||||
m_frameworkManager.registerTestFramework(new BoostTestFramework);
|
m_frameworkManager.registerTestFramework(new BoostTestFramework);
|
||||||
m_frameworkManager.registerTestFramework(new CatchFramework);
|
m_frameworkManager.registerTestFramework(new CatchFramework);
|
||||||
|
|
||||||
|
m_frameworkManager.registerTestTool(new CTestTool);
|
||||||
|
|
||||||
m_frameworkManager.synchronizeSettings(ICore::settings());
|
m_frameworkManager.synchronizeSettings(ICore::settings());
|
||||||
m_navigationWidgetFactory = new TestNavigationWidgetFactory;
|
m_navigationWidgetFactory = new TestNavigationWidgetFactory;
|
||||||
m_resultsPane = TestResultsPane::instance();
|
m_resultsPane = TestResultsPane::instance();
|
||||||
|
45
src/plugins/autotest/ctest/ctestconfiguration.cpp
Normal file
45
src/plugins/autotest/ctest/ctestconfiguration.cpp
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "ctestconfiguration.h"
|
||||||
|
#include "ctestoutputreader.h"
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
CTestConfiguration::CTestConfiguration(ITestBase *testBase)
|
||||||
|
: TestToolConfiguration(testBase)
|
||||||
|
{
|
||||||
|
setDisplayName("CTest");
|
||||||
|
}
|
||||||
|
|
||||||
|
TestOutputReader *CTestConfiguration::outputReader(const QFutureInterface<TestResultPtr> &fi,
|
||||||
|
QProcess *app) const
|
||||||
|
{
|
||||||
|
return new CTestOutputReader(fi, app, workingDirectory());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
43
src/plugins/autotest/ctest/ctestconfiguration.h
Normal file
43
src/plugins/autotest/ctest/ctestconfiguration.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../testconfiguration.h"
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CTestConfiguration final : public Autotest::TestToolConfiguration
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit CTestConfiguration(ITestBase *testBase);
|
||||||
|
|
||||||
|
TestOutputReader *outputReader(const QFutureInterface<TestResultPtr> &fi,
|
||||||
|
QProcess *app) const final;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
156
src/plugins/autotest/ctest/ctestoutputreader.cpp
Normal file
156
src/plugins/autotest/ctest/ctestoutputreader.cpp
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "ctestoutputreader.h"
|
||||||
|
|
||||||
|
#include "ctesttreeitem.h"
|
||||||
|
#include "../testframeworkmanager.h"
|
||||||
|
#include "../testresult.h"
|
||||||
|
|
||||||
|
#include <cmakeprojectmanager/cmakeprojectconstants.h>
|
||||||
|
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CTestResult : public TestResult
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CTestResult(const QString &id, const QString &project, const QString &testCase)
|
||||||
|
: TestResult(id, project)
|
||||||
|
, m_testCase(testCase)
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool isDirectParentOf(const TestResult *other, bool *needsIntermediate) const override
|
||||||
|
{
|
||||||
|
if (!TestResult::isDirectParentOf(other, needsIntermediate))
|
||||||
|
return false;
|
||||||
|
return result() == ResultType::TestStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ITestTreeItem *findTestTreeItem() const override
|
||||||
|
{
|
||||||
|
ITestTool *testTool = TestFrameworkManager::testToolForBuildSystemId(
|
||||||
|
CMakeProjectManager::Constants::CMAKE_PROJECT_ID);
|
||||||
|
QTC_ASSERT(testTool, return nullptr);
|
||||||
|
const ITestTreeItem *rootNode = testTool->rootNode();
|
||||||
|
if (!rootNode)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return rootNode->findFirstLevelChild([this](const ITestTreeItem *item) {
|
||||||
|
return item && item->name() == m_testCase;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_testCase;
|
||||||
|
};
|
||||||
|
|
||||||
|
CTestOutputReader::CTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface,
|
||||||
|
QProcess *testApplication, const QString &buildDirectory)
|
||||||
|
: TestOutputReader(futureInterface, testApplication, buildDirectory)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTestOutputReader::processOutputLine(const QByteArray &outputLine)
|
||||||
|
{
|
||||||
|
static const QRegularExpression testProject("^Test project (.*)$");
|
||||||
|
static const QRegularExpression testCase("^(test \\d+)|( Start\\s+\\d+: .*)$");
|
||||||
|
static const QRegularExpression testResult("^\\s*\\d+/\\d+ Test\\s+#\\d+: (.*) (\\.+)\\s*"
|
||||||
|
"(Passed|\\*\\*\\*Failed)\\s+(.*) sec$");
|
||||||
|
static const QRegularExpression summary("^\\d+% tests passed, (\\d+) tests failed "
|
||||||
|
"out of (\\d+)");
|
||||||
|
static const QRegularExpression summaryTime("^Total Test time .* =\\s+(.*) sec$");
|
||||||
|
|
||||||
|
const QString line = removeCommandlineColors(QString::fromLatin1(outputLine));
|
||||||
|
if (line.trimmed().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
struct ExactMatch : public QRegularExpressionMatch
|
||||||
|
{
|
||||||
|
ExactMatch(const QRegularExpressionMatch &other) : QRegularExpressionMatch(other) {}
|
||||||
|
operator bool() const { return hasMatch(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ExactMatch match = testProject.match(line)) {
|
||||||
|
if (!m_testName.isEmpty()) // possible?
|
||||||
|
sendCompleteInformation();
|
||||||
|
m_project = match.captured(1);
|
||||||
|
TestResultPtr testResult = createDefaultResult();
|
||||||
|
testResult->setResult(ResultType::TestStart);
|
||||||
|
testResult->setDescription(tr("Running tests for %1").arg(m_project));
|
||||||
|
reportResult(testResult);
|
||||||
|
} else if (ExactMatch match = testCase.match(line)) {
|
||||||
|
if (!m_testName.isEmpty())
|
||||||
|
sendCompleteInformation();
|
||||||
|
} else if (ExactMatch match = testResult.match(line)) {
|
||||||
|
m_description = match.captured();
|
||||||
|
m_testName = match.captured(1);
|
||||||
|
m_result = (match.captured(3) == "Passed") ? ResultType::Pass : ResultType::Fail;
|
||||||
|
} else if (ExactMatch match = summary.match(line)) {
|
||||||
|
if (!m_testName.isEmpty())
|
||||||
|
sendCompleteInformation();
|
||||||
|
TestResultPtr testResult = createDefaultResult();
|
||||||
|
testResult->setResult(ResultType::MessageInfo);
|
||||||
|
testResult->setDescription(match.captured());
|
||||||
|
reportResult(testResult);
|
||||||
|
int failed = match.captured(1).toInt();
|
||||||
|
int testCount = match.captured(2).toInt();
|
||||||
|
m_summary.insert(ResultType::Fail, failed);
|
||||||
|
m_summary.insert(ResultType::Pass, testCount - failed);
|
||||||
|
} else if (ExactMatch match = summaryTime.match(line)) {
|
||||||
|
if (!m_testName.isEmpty()) // possible?
|
||||||
|
sendCompleteInformation();
|
||||||
|
TestResultPtr testResult = createDefaultResult();
|
||||||
|
testResult->setResult(ResultType::TestEnd);
|
||||||
|
testResult->setDescription(match.captured());
|
||||||
|
reportResult(testResult);
|
||||||
|
} else {
|
||||||
|
if (!m_description.isEmpty())
|
||||||
|
m_description.append('\n');
|
||||||
|
m_description.append(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TestResultPtr CTestOutputReader::createDefaultResult() const
|
||||||
|
{
|
||||||
|
return TestResultPtr(new CTestResult(id(), m_project, m_testName));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTestOutputReader::sendCompleteInformation()
|
||||||
|
{
|
||||||
|
TestResultPtr testResult = createDefaultResult();
|
||||||
|
testResult->setResult(m_result);
|
||||||
|
testResult->setDescription(m_description);
|
||||||
|
reportResult(testResult);
|
||||||
|
m_testName.clear();
|
||||||
|
m_description.clear();
|
||||||
|
m_result = ResultType::Invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
52
src/plugins/autotest/ctest/ctestoutputreader.h
Normal file
52
src/plugins/autotest/ctest/ctestoutputreader.h
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../testoutputreader.h"
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CTestOutputReader final : public Autotest::TestOutputReader
|
||||||
|
{
|
||||||
|
Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::CTestOutputReader)
|
||||||
|
public:
|
||||||
|
CTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface,
|
||||||
|
QProcess *testApplication, const QString &buildDirectory);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void processOutputLine(const QByteArray &outputLineWithNewLine) final;
|
||||||
|
TestResultPtr createDefaultResult() const final;
|
||||||
|
void sendCompleteInformation();
|
||||||
|
QString m_project;
|
||||||
|
QString m_testName;
|
||||||
|
QString m_description;
|
||||||
|
ResultType m_result = ResultType::Invalid;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
62
src/plugins/autotest/ctest/ctesttool.cpp
Normal file
62
src/plugins/autotest/ctest/ctesttool.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "ctesttool.h"
|
||||||
|
#include "ctesttreeitem.h"
|
||||||
|
|
||||||
|
#include <cmakeprojectmanager/cmakeprojectconstants.h>
|
||||||
|
|
||||||
|
#include <projectexplorer/buildsystem.h>
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
Utils::Id CTestTool::buildSystemId() const
|
||||||
|
{
|
||||||
|
return Utils::Id(CMakeProjectManager::Constants::CMAKE_PROJECT_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
ITestTreeItem *CTestTool::createItemFromTestCaseInfo(const ProjectExplorer::TestCaseInfo &tci)
|
||||||
|
{
|
||||||
|
CTestTreeItem *item = new CTestTreeItem(this, tci.name, tci.path.toString(),
|
||||||
|
TestTreeItem::TestCase);
|
||||||
|
item->setLine(tci.line);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *CTestTool::name() const
|
||||||
|
{
|
||||||
|
return "CTest";
|
||||||
|
}
|
||||||
|
|
||||||
|
ITestTreeItem *CTestTool::createRootNode()
|
||||||
|
{
|
||||||
|
return new CTestTreeItem(this,
|
||||||
|
QCoreApplication::translate("CTestTool", "CTest"),
|
||||||
|
QString(), ITestTreeItem::Root);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
48
src/plugins/autotest/ctest/ctesttool.h
Normal file
48
src/plugins/autotest/ctest/ctesttool.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../itestframework.h"
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CTestTool final : public Autotest::ITestTool
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CTestTool() : Autotest::ITestTool(false) {}
|
||||||
|
|
||||||
|
Utils::Id buildSystemId() const final;
|
||||||
|
|
||||||
|
ITestTreeItem *createItemFromTestCaseInfo(const ProjectExplorer::TestCaseInfo &tci) final;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
const char *name() const final;
|
||||||
|
ITestTreeItem *createRootNode() final;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
132
src/plugins/autotest/ctest/ctesttreeitem.cpp
Normal file
132
src/plugins/autotest/ctest/ctesttreeitem.cpp
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "ctesttreeitem.h"
|
||||||
|
|
||||||
|
#include "ctestconfiguration.h"
|
||||||
|
|
||||||
|
#include "../autotestplugin.h"
|
||||||
|
#include "../itestframework.h"
|
||||||
|
#include "../testsettings.h"
|
||||||
|
|
||||||
|
#include <projectexplorer/buildsystem.h>
|
||||||
|
#include <projectexplorer/project.h>
|
||||||
|
#include <projectexplorer/session.h>
|
||||||
|
#include <projectexplorer/target.h>
|
||||||
|
|
||||||
|
#include <utils/link.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
CTestTreeItem::CTestTreeItem(ITestBase *testBase, const QString &name,
|
||||||
|
const QString &filepath, Type type)
|
||||||
|
: ITestTreeItem(testBase, name, filepath, type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<ITestConfiguration *> CTestTreeItem::getAllTestConfigurations() const
|
||||||
|
{
|
||||||
|
return testConfigurationsFor({});
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<ITestConfiguration *> CTestTreeItem::getSelectedTestConfigurations() const
|
||||||
|
{
|
||||||
|
QStringList selectedTests;
|
||||||
|
forFirstLevelChildren([&selectedTests](ITestTreeItem *it) {
|
||||||
|
if (it->checked())
|
||||||
|
selectedTests.append(it->name());
|
||||||
|
});
|
||||||
|
|
||||||
|
return selectedTests.isEmpty() ? QList<ITestConfiguration *>()
|
||||||
|
: testConfigurationsFor(selectedTests);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<ITestConfiguration *> CTestTreeItem::getFailedTestConfigurations() const
|
||||||
|
{
|
||||||
|
QStringList selectedTests;
|
||||||
|
forFirstLevelChildren([&selectedTests](ITestTreeItem *it) {
|
||||||
|
if (it->data(0, FailedRole).toBool())
|
||||||
|
selectedTests.append(it->name());
|
||||||
|
});
|
||||||
|
|
||||||
|
return selectedTests.isEmpty() ? QList<ITestConfiguration *>()
|
||||||
|
: testConfigurationsFor(selectedTests);
|
||||||
|
}
|
||||||
|
|
||||||
|
ITestConfiguration *CTestTreeItem::testConfiguration() const
|
||||||
|
{
|
||||||
|
return testConfigurationsFor({name()}).value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant CTestTreeItem::data(int column, int role) const
|
||||||
|
{
|
||||||
|
if (role == Qt::CheckStateRole)
|
||||||
|
return checked();
|
||||||
|
if (role == LinkRole) {
|
||||||
|
QVariant itemLink;
|
||||||
|
itemLink.setValue(Utils::Link(filePath(), line()));
|
||||||
|
return itemLink;
|
||||||
|
}
|
||||||
|
return ITestTreeItem::data(column, role);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<ITestConfiguration *> CTestTreeItem::testConfigurationsFor(const QStringList &selected) const
|
||||||
|
{
|
||||||
|
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
||||||
|
if (!project)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
const ProjectExplorer::Target *target = project->targets().value(0);
|
||||||
|
if (!target)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
const ProjectExplorer::BuildSystem *buildSystem = target->buildSystem();
|
||||||
|
QStringList options{"--timeout", QString::number(AutotestPlugin::settings()->timeout / 1000)};
|
||||||
|
// TODO add ctest options from settings?
|
||||||
|
Utils::CommandLine command = buildSystem->commandLineForTests(selected, options);
|
||||||
|
if (command.executable().isEmpty())
|
||||||
|
return {};
|
||||||
|
|
||||||
|
CTestConfiguration *config = new CTestConfiguration(testBase());
|
||||||
|
config->setProject(project);
|
||||||
|
config->setCommandLine(command);
|
||||||
|
const QList<ProjectExplorer::BuildConfiguration *> buildConfigs = target->buildConfigurations();
|
||||||
|
if (QTC_GUARD(!buildConfigs.isEmpty())) {
|
||||||
|
config->setEnvironment(buildConfigs.first()->environment());
|
||||||
|
config->setWorkingDirectory(buildConfigs.first()->buildDirectory().toString());
|
||||||
|
} else {
|
||||||
|
config->setEnvironment(Utils::Environment::systemEnvironment());
|
||||||
|
}
|
||||||
|
if (selected.isEmpty())
|
||||||
|
config->setTestCaseCount(testBase()->asTestTool()->rootNode()->childCount());
|
||||||
|
else
|
||||||
|
config->setTestCaseCount(selected.size());
|
||||||
|
return {config};
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
50
src/plugins/autotest/ctest/ctesttreeitem.h
Normal file
50
src/plugins/autotest/ctest/ctesttreeitem.h
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../testtreeitem.h"
|
||||||
|
|
||||||
|
namespace Autotest {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CTestTreeItem final : public Autotest::ITestTreeItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CTestTreeItem(ITestBase *testBase, const QString &name, const QString &filepath, Type type);
|
||||||
|
|
||||||
|
QList<ITestConfiguration *> getAllTestConfigurations() const final;
|
||||||
|
QList<ITestConfiguration *> getSelectedTestConfigurations() const final;
|
||||||
|
QList<ITestConfiguration *> getFailedTestConfigurations() const final;
|
||||||
|
ITestConfiguration *testConfiguration() const final;
|
||||||
|
bool canProvideTestConfiguration() const final { return true; }
|
||||||
|
|
||||||
|
QVariant data(int column, int role) const final;
|
||||||
|
private:
|
||||||
|
QList<ITestConfiguration *> testConfigurationsFor(const QStringList &selected) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace Autotest
|
Reference in New Issue
Block a user