diff options
author | Christian Stenger <[email protected]> | 2016-01-22 10:46:45 +0100 |
---|---|---|
committer | Eike Ziller <[email protected]> | 2016-01-22 14:07:19 +0000 |
commit | 15b4e6fc91f3c9a50e695d1c81933ba132efe9b6 (patch) | |
tree | 2f80826a9b35ac3e7a39f194fda4586351ee3fc1 /src/plugins/autotest/testconfiguration.cpp | |
parent | 5448e7bab84c7abd9e03234e66c952ad4315f419 (diff) |
Delete unneeded and prepare directory structure...
...to get plugin's repository more easily integrated
into QC's repository.
Change-Id: I10243bb4283623ae951e799feacaa15915678e04
Reviewed-by: Eike Ziller <[email protected]>
Diffstat (limited to 'src/plugins/autotest/testconfiguration.cpp')
-rw-r--r-- | src/plugins/autotest/testconfiguration.cpp | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/src/plugins/autotest/testconfiguration.cpp b/src/plugins/autotest/testconfiguration.cpp new file mode 100644 index 00000000000..063aa5980ea --- /dev/null +++ b/src/plugins/autotest/testconfiguration.cpp @@ -0,0 +1,255 @@ +/**************************************************************************** +** +** Copyright (C) 2016 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 "testconfiguration.h" + +#include <cpptools/cppmodelmanager.h> +#include <cpptools/projectinfo.h> + +#include <projectexplorer/buildtargetinfo.h> +#include <projectexplorer/environmentaspect.h> +#include <projectexplorer/localapplicationrunconfiguration.h> +#include <projectexplorer/project.h> +#include <projectexplorer/runconfiguration.h> +#include <projectexplorer/session.h> +#include <projectexplorer/target.h> + +using namespace ProjectExplorer; + +namespace Autotest { +namespace Internal { + +TestConfiguration::TestConfiguration(const QString &testClass, const QStringList &testCases, + int testCaseCount, QObject *parent) + : QObject(parent), + m_testClass(testClass), + m_testCases(testCases), + m_testCaseCount(testCaseCount), + m_unnamedOnly(false), + m_project(0), + m_guessedConfiguration(false), + m_type(TestTypeQt) +{ + if (testCases.size() != 0) + m_testCaseCount = testCases.size(); +} + +TestConfiguration::~TestConfiguration() +{ + m_testCases.clear(); +} + +void basicProjectInformation(Project *project, const QString &mainFilePath, QString *proFile, + QString *displayName, Project **targetProject) +{ + CppTools::CppModelManager *cppMM = CppTools::CppModelManager::instance(); + QList<CppTools::ProjectPart::Ptr> projParts = cppMM->projectInfo(project).projectParts(); + + foreach (const CppTools::ProjectPart::Ptr &part, projParts) { + foreach (const CppTools::ProjectFile currentFile, part->files) { + if (currentFile.path == mainFilePath) { + *proFile = part->projectFile; + *displayName = part->displayName; + *targetProject = part->project; + return; + } + } + } +} + +void basicProjectInformation(Project *project, const QString &proFile, QString *displayName, + Project **targetProject) +{ + CppTools::CppModelManager *cppMM = CppTools::CppModelManager::instance(); + QList<CppTools::ProjectPart::Ptr> projParts = cppMM->projectInfo(project).projectParts(); + + foreach (const CppTools::ProjectPart::Ptr &part, projParts) { + if (part->projectFile == proFile) { + *displayName = part->displayName; + *targetProject = part->project; + return; + } + } +} + +void extractEnvironmentInformation(LocalApplicationRunConfiguration *localRunConfiguration, + QString *workDir, Utils::Environment *env) +{ + *workDir = Utils::FileUtils::normalizePathName(localRunConfiguration->workingDirectory()); + if (auto environmentAspect = localRunConfiguration->extraAspect<EnvironmentAspect>()) + *env = environmentAspect->environment(); +} + +void TestConfiguration::completeTestInformation() +{ + QTC_ASSERT(!m_mainFilePath.isEmpty() || !m_proFile.isEmpty(), return); + + typedef LocalApplicationRunConfiguration LocalRunConfig; + + Project *project = SessionManager::startupProject(); + if (!project) + return; + + QString targetFile; + QString targetName; + QString workDir; + QString proFile = m_proFile; + QString displayName; + Project *targetProject = 0; + Utils::Environment env; + bool hasDesktopTarget = false; + bool guessedRunConfiguration = false; + setProject(0); + + if (m_proFile.isEmpty()) + basicProjectInformation(project, m_mainFilePath, &proFile, &displayName, &targetProject); + else + basicProjectInformation(project, proFile, &displayName, &targetProject); + + Target *target = project->activeTarget(); + if (!target) + return; + + BuildTargetInfoList appTargets = target->applicationTargets(); + foreach (const BuildTargetInfo &bti, appTargets.list) { + // some project manager store line/column information as well inside ProjectPart + if (bti.isValid() && proFile.startsWith(bti.projectFilePath.toString())) { + targetFile = Utils::HostOsInfo::withExecutableSuffix(bti.targetFilePath.toString()); + targetName = bti.targetName; + break; + } + } + + QList<RunConfiguration *> rcs = target->runConfigurations(); + foreach (RunConfiguration *rc, rcs) { + auto config = qobject_cast<LocalRunConfig *>(rc); + if (config && config->executable() == targetFile) { + extractEnvironmentInformation(config, &workDir, &env); + hasDesktopTarget = true; + break; + } + } + + // if we could not figure out the run configuration + // try to use the run configuration of the parent project + if (!hasDesktopTarget && targetProject && !targetFile.isEmpty()) { + if (auto config = qobject_cast<LocalRunConfig *>(target->activeRunConfiguration())) { + extractEnvironmentInformation(config, &workDir, &env); + hasDesktopTarget = true; + guessedRunConfiguration = true; + } + } + + setProFile(proFile); + setDisplayName(displayName); + + if (hasDesktopTarget) { + setTargetFile(targetFile); + setTargetName(targetName); + setWorkingDirectory(workDir); + setEnvironment(env); + setProject(project); + setGuessedConfiguration(guessedRunConfiguration); + } +} + + +/** + * @brief sets the test cases for this test configuration. + * + * Watch out for special handling of test configurations, because this method also + * updates the test case count to the current size of \a testCases. + * + * @param testCases list of names of the test functions / test cases + */ +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; +} + +void TestConfiguration::setMainFilePath(const QString &mainFile) +{ + m_mainFilePath = mainFile; +} + +void TestConfiguration::setTargetFile(const QString &targetFile) +{ + m_targetFile = targetFile; +} + +void TestConfiguration::setTargetName(const QString &targetName) +{ + m_targetName = targetName; +} + +void TestConfiguration::setProFile(const QString &proFile) +{ + m_proFile = proFile; +} + +void TestConfiguration::setWorkingDirectory(const QString &workingDirectory) +{ + m_workingDir = workingDirectory; +} + +void TestConfiguration::setDisplayName(const QString &displayName) +{ + m_displayName = displayName; +} + +void TestConfiguration::setEnvironment(const Utils::Environment &env) +{ + m_environment = env; +} + +void TestConfiguration::setProject(Project *project) +{ + m_project = project; +} + +void TestConfiguration::setUnnamedOnly(bool unnamedOnly) +{ + m_unnamedOnly = unnamedOnly; +} + +void TestConfiguration::setGuessedConfiguration(bool guessed) +{ + m_guessedConfiguration = guessed; +} + +void TestConfiguration::setTestType(TestType type) +{ + m_type = type; +} + +} // namespace Internal +} // namespace Autotest |