forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
|
||||||
|
@@ -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
|
||||||
)
|
)
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user