1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#include "ctesttreeitem.h"
#include "ctestconfiguration.h"
#include "ctestsettings.h"
#include "../autotestplugin.h"
#include "../itestframework.h"
#include "../testsettings.h"
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsystem.h>
#include <projectexplorer/environmentaspect.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 Utils::FilePath &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)};
auto ctestSettings = static_cast<CTestSettings *>(testBase()->testSettings());
options << ctestSettings->activeSettingsAsOptions();
Utils::CommandLine command = buildSystem->commandLineForTests(selected, options);
if (command.executable().isEmpty())
return {};
CTestConfiguration *config = new CTestConfiguration(testBase());
config->setProject(project);
config->setCommandLine(command);
const ProjectExplorer::RunConfiguration *runConfig = target->activeRunConfiguration();
Utils::Environment env = Utils::Environment::systemEnvironment();
if (QTC_GUARD(runConfig)) {
if (auto envAspect = runConfig->aspect<ProjectExplorer::EnvironmentAspect>())
env = envAspect->environment();
}
if (Utils::HostOsInfo::isWindowsHost()) {
env.set("QT_FORCE_STDERR_LOGGING", "1");
env.set("QT_LOGGING_TO_CONSOLE", "1");
}
config->setEnvironment(env);
const ProjectExplorer::BuildConfiguration *buildConfig = target->activeBuildConfiguration();
if (QTC_GUARD(buildConfig))
config->setWorkingDirectory(buildConfig->buildDirectory());
if (selected.isEmpty())
config->setTestCaseCount(testBase()->asTestTool()->rootNode()->childCount());
else
config->setTestCaseCount(selected.size());
return {config};
}
} // namespace Internal
} // namespace Autotest
|