forked from qt-creator/qt-creator
Add TestStringTable scenario
This scenario is used for testing against regression in StringTable.
If the scenario went OK, the creator finishes and doesn't crash.
Later, this scenario will be invoked from additional test, so that
the second instance of creator will run and the test will
check if the subprocess finished OK. So it's going to be combined
with autotests in the follow up patch.
In order to test it, run creator with the following command line:
"-settingspath ~/.config -scenario TestStringTable". Make sure,
that you point settingspath to creator settings which have
proper kit with a toolchain and Qt setup.
The regression may be tested by restoring the
src/plugins/cpptools/stringtable.cpp to the parent of
f4ab1279fd and by applying on top of it
this patch (simple conflict may need to be resolved). In this case
running this scenario ends up with a crash (so, it confirms this test
fails on the old code form before the fix).
Change-Id: Icbb56233495047fd68bfb605fcd088f352a16323
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
100
src/plugins/autotest/loadprojectscenario.cpp
Normal file
100
src/plugins/autotest/loadprojectscenario.cpp
Normal file
@@ -0,0 +1,100 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2021 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 "loadprojectscenario.h"
|
||||
|
||||
#include <cpptools/cpptoolstestcase.h>
|
||||
#include <cpptools/projectinfo.h>
|
||||
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
|
||||
using namespace Core;
|
||||
using namespace ProjectExplorer;
|
||||
using namespace Utils;
|
||||
|
||||
namespace Autotest {
|
||||
namespace Internal {
|
||||
|
||||
LoadProjectScenario::LoadProjectScenario(TestTreeModel *model, QObject *parent)
|
||||
: QObject(parent),
|
||||
m_model(model)
|
||||
{
|
||||
}
|
||||
|
||||
LoadProjectScenario::~LoadProjectScenario()
|
||||
{
|
||||
delete m_tmpDir;
|
||||
}
|
||||
|
||||
bool LoadProjectScenario::operator()()
|
||||
{
|
||||
return init() && loadProject();
|
||||
}
|
||||
|
||||
bool LoadProjectScenario::init()
|
||||
{
|
||||
const QList<Kit *> allKits = KitManager::kits();
|
||||
if (allKits.count() == 0) {
|
||||
qWarning() << "This scenario requires at least one kit to be present";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_kit = findOr(allKits, nullptr, [](Kit *k) {
|
||||
return k->isValid() && QtSupport::QtKitAspect::qtVersion(k) != nullptr;
|
||||
});
|
||||
if (!m_kit) {
|
||||
qWarning() << "The scenario requires at least one valid kit with a valid Qt";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!QtSupport::QtKitAspect::qtVersion(m_kit)) {
|
||||
qWarning() << "Could not figure out which Qt version is used for default kit.";
|
||||
return false;
|
||||
}
|
||||
|
||||
const ToolChain * const toolchain = ToolChainKitAspect::cxxToolChain(m_kit);
|
||||
if (!toolchain) {
|
||||
qWarning() << "This test requires that there is a kit with a toolchain.";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_tmpDir = new CppTools::Tests::TemporaryCopiedDir(":/unit_test");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LoadProjectScenario::loadProject()
|
||||
{
|
||||
const QString projectFilePath = m_tmpDir->path() + "/plain/plain.pro";
|
||||
|
||||
CppTools::Tests::ProjectOpenerAndCloser projectManager;
|
||||
// This code must trigger a call to PluginManager::finishScenario() at some later point.
|
||||
const CppTools::ProjectInfo projectInfo = projectManager.open(projectFilePath, true, m_kit);
|
||||
return projectInfo.isValid();
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Autotest
|
||||
Reference in New Issue
Block a user