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

View File

@@ -48,7 +48,7 @@ public:
static LauncherInterface &instance(); static LauncherInterface &instance();
~LauncherInterface() override; ~LauncherInterface() override;
static void startLauncher(); static void startLauncher(const QString &pathToLauncher = {});
static void stopLauncher(); static void stopLauncher();
static Internal::LauncherSocket *socket(); 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 add_qtc_test(tst_qtcprocess
DEFINES "TEST_RELATIVE_LIBEXEC_PATH=\"${TEST_RELATIVE_LIBEXEC_PATH}\""
DEPENDS Utils DEPENDS Utils
SOURCES tst_qtcprocess.cpp SOURCES tst_qtcprocess.cpp
) )

View File

@@ -3,4 +3,8 @@ include(../../qttest.pri)
win32:DEFINES += _CRT_SECURE_NO_WARNINGS 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 SOURCES += tst_qtcprocess.cpp

View File

@@ -1,11 +1,17 @@
import qbs import qbs.FileInfo
QtcAutotest { QtcAutotest {
name: "QtcProcess autotest" name: "QtcProcess autotest"
Depends { name: "Utils" } Depends { name: "Utils" }
files: "tst_qtcprocess.cpp" files: "tst_qtcprocess.cpp"
Properties { cpp.defines: {
condition: qbs.targetOS === "windows" var defines = base;
cpp.defines: base.concat(["_CRT_SECURE_NO_WARNINGS"]) 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/environment.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <utils/launcherinterface.h>
#include <utils/porting.h> #include <utils/porting.h>
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
#include <utils/stringutils.h> #include <utils/stringutils.h>
@@ -133,6 +134,8 @@ private slots:
void lineCallback(); void lineCallback();
void lineCallbackIntern(); void lineCallbackIntern();
void cleanupTestCase();
private: private:
void iteratorEditsHelper(OsType osType); void iteratorEditsHelper(OsType osType);
@@ -147,6 +150,8 @@ private:
void tst_QtcProcess::initTestCase() void tst_QtcProcess::initTestCase()
{ {
Utils::LauncherInterface::startLauncher(qApp->applicationDirPath() + '/'
+ QLatin1String(TEST_RELATIVE_LIBEXEC_PATH));
if (qEnvironmentVariableIsSet(kExitCodeSubProcessCode)) if (qEnvironmentVariableIsSet(kExitCodeSubProcessCode))
exitCodeSubProcessMain(); exitCodeSubProcessMain();
if (qEnvironmentVariableIsSet(kRunBlockingStdOutSubProcessWithEndl)) if (qEnvironmentVariableIsSet(kRunBlockingStdOutSubProcessWithEndl))
@@ -195,6 +200,10 @@ void tst_QtcProcess::initTestCase()
mxUnix.insert("z", ""); mxUnix.insert("z", "");
} }
void tst_QtcProcess::cleanupTestCase()
{
Utils::LauncherInterface::stopLauncher();
}
Q_DECLARE_METATYPE(ProcessArgs::SplitError) Q_DECLARE_METATYPE(ProcessArgs::SplitError)
Q_DECLARE_METATYPE(Utils::OsType) Q_DECLARE_METATYPE(Utils::OsType)