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();
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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
|
||||
)
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user