Start and stop the process launcher in tst_qtcprocess

Change-Id: Ib28450d10c699abe3964f8bef2ff24baae0074f7
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Jarek Kobus
2021-08-13 13:30:43 +02:00
parent 328af3c08a
commit 9966cc4bcc
6 changed files with 35 additions and 11 deletions

View File

@@ -90,6 +90,7 @@ public:
void handleProcessStderr();
Internal::LauncherSocket *socket() const { return m_socket; }
void setPathToLauncher(const QString &path) { if (!path.isEmpty()) m_pathToLauncher = path; }
signals:
void errorOccurred(const QString &error);
@@ -97,13 +98,14 @@ private:
QLocalServer * const m_server;
Internal::LauncherSocket *const m_socket;
Internal::LauncherProcess *m_process = nullptr;
QString m_pathToLauncher;
int m_startRequests = 0;
};
LauncherInterfacePrivate::LauncherInterfacePrivate()
: m_server(new QLocalServer(this)), m_socket(new LauncherSocket(this))
{
m_pathToLauncher = qApp->applicationDirPath() + '/' + QLatin1String(RELATIVE_LIBEXEC_PATH);
QObject::connect(m_server, &QLocalServer::newConnection,
this, &LauncherInterfacePrivate::handleNewConnection);
}
@@ -130,10 +132,8 @@ void LauncherInterfacePrivate::doStart()
this, &LauncherInterfacePrivate::handleProcessFinished);
connect(m_process, &QProcess::readyReadStandardError,
this, &LauncherInterfacePrivate::handleProcessStderr);
m_process->start(qApp->applicationDirPath() + QLatin1Char('/')
+ QLatin1String(RELATIVE_LIBEXEC_PATH)
+ QLatin1String("/qtcreator_processlauncher"),
QStringList(m_server->fullServerName()));
const QString launcherPath = m_pathToLauncher + QLatin1String("/qtcreator_processlauncher");
m_process->start(launcherPath, QStringList(m_server->fullServerName()));
}
void LauncherInterfacePrivate::doStop()
@@ -208,9 +208,10 @@ LauncherInterface::~LauncherInterface()
m_thread.wait();
}
void LauncherInterface::startLauncher()
void LauncherInterface::startLauncher(const QString &pathToLauncher)
{
// Call in launcher's thread.
instance().m_private->setPathToLauncher(pathToLauncher);
QMetaObject::invokeMethod(instance().m_private, &LauncherInterfacePrivate::doStart);
}

View File

@@ -48,7 +48,7 @@ public:
static LauncherInterface &instance();
~LauncherInterface() override;
static void startLauncher();
static void startLauncher(const QString &pathToLauncher = {});
static void stopLauncher();
static Internal::LauncherSocket *socket();

View File

@@ -1,4 +1,8 @@
file(RELATIVE_PATH RELATIVE_TEST_PATH "${PROJECT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
file(RELATIVE_PATH TEST_RELATIVE_LIBEXEC_PATH "/${RELATIVE_TEST_PATH}" "/${IDE_LIBEXEC_PATH}")
add_qtc_test(tst_qtcprocess
DEFINES "TEST_RELATIVE_LIBEXEC_PATH=\"${TEST_RELATIVE_LIBEXEC_PATH}\""
DEPENDS Utils
SOURCES tst_qtcprocess.cpp
)

View File

@@ -3,4 +3,8 @@ include(../../qttest.pri)
win32:DEFINES += _CRT_SECURE_NO_WARNINGS
TEST_RELATIVE_LIBEXEC_PATH = $$relative_path($$IDE_LIBEXEC_PATH, $$OUT_PWD)
win32:TEST_RELATIVE_LIBEXEC_PATH=../$$TEST_RELATIVE_LIBEXEC_PATH
DEFINES += TEST_RELATIVE_LIBEXEC_PATH=\\\"$$TEST_RELATIVE_LIBEXEC_PATH\\\"
SOURCES += tst_qtcprocess.cpp

View File

@@ -1,11 +1,17 @@
import qbs
import qbs.FileInfo
QtcAutotest {
name: "QtcProcess autotest"
Depends { name: "Utils" }
files: "tst_qtcprocess.cpp"
Properties {
condition: qbs.targetOS === "windows"
cpp.defines: base.concat(["_CRT_SECURE_NO_WARNINGS"])
cpp.defines: {
var defines = base;
if (qbs.targetOS === "windows")
defines.push("_CRT_SECURE_NO_WARNINGS");
var absLibExecPath = FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix,
qtc.ide_libexec_path);
var relLibExecPath = FileInfo.relativePath(destinationDirectory, absLibExecPath);
defines.push('TEST_RELATIVE_LIBEXEC_PATH="' + relLibExecPath + '"');
return defines;
}
}

View File

@@ -25,6 +25,7 @@
#include <utils/environment.h>
#include <utils/hostosinfo.h>
#include <utils/launcherinterface.h>
#include <utils/porting.h>
#include <utils/qtcprocess.h>
#include <utils/stringutils.h>
@@ -133,6 +134,8 @@ private slots:
void lineCallback();
void lineCallbackIntern();
void cleanupTestCase();
private:
void iteratorEditsHelper(OsType osType);
@@ -147,6 +150,8 @@ private:
void tst_QtcProcess::initTestCase()
{
Utils::LauncherInterface::startLauncher(qApp->applicationDirPath() + '/'
+ QLatin1String(TEST_RELATIVE_LIBEXEC_PATH));
if (qEnvironmentVariableIsSet(kExitCodeSubProcessCode))
exitCodeSubProcessMain();
if (qEnvironmentVariableIsSet(kRunBlockingStdOutSubProcessWithEndl))
@@ -195,6 +200,10 @@ void tst_QtcProcess::initTestCase()
mxUnix.insert("z", "");
}
void tst_QtcProcess::cleanupTestCase()
{
Utils::LauncherInterface::stopLauncher();
}
Q_DECLARE_METATYPE(ProcessArgs::SplitError)
Q_DECLARE_METATYPE(Utils::OsType)