forked from qt-creator/qt-creator
Add a test for waitingForStarted and waitingForFinished
Change-Id: I2d38bb2d37a71aad6d762aa68f1f3b329a4fa302 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -48,6 +48,7 @@ const char kExitCodeSubProcessCode[] = "QTC_TST_QTCPROCESS_EXITCODE_CODE";
|
|||||||
const char kRunBlockingStdOutSubProcessMagicWord[] = "42";
|
const char kRunBlockingStdOutSubProcessMagicWord[] = "42";
|
||||||
const char kRunBlockingStdOutSubProcessWithEndl[] = "QTC_TST_QTCPROCESS_RUNBLOCKINGSTDOUT_WITHENDL";
|
const char kRunBlockingStdOutSubProcessWithEndl[] = "QTC_TST_QTCPROCESS_RUNBLOCKINGSTDOUT_WITHENDL";
|
||||||
const char kLineCallback[] = "QTC_TST_QTCPROCESS_LINECALLBACK";
|
const char kLineCallback[] = "QTC_TST_QTCPROCESS_LINECALLBACK";
|
||||||
|
const char kTestProcess[] = "QTC_TST_TEST_PROCESS";
|
||||||
|
|
||||||
// Expect ending lines detected at '|':
|
// Expect ending lines detected at '|':
|
||||||
const char lineCallbackData[] =
|
const char lineCallbackData[] =
|
||||||
@@ -86,6 +87,12 @@ static void lineCallbackMain()
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void testProcessSubProcessMain()
|
||||||
|
{
|
||||||
|
std::cout << "Test process successfully executed." << std::endl;
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
class MacroMapExpander : public AbstractMacroExpander {
|
class MacroMapExpander : public AbstractMacroExpander {
|
||||||
public:
|
public:
|
||||||
virtual bool resolveMacro(const QString &name, QString *ret, QSet<AbstractMacroExpander*> &seen)
|
virtual bool resolveMacro(const QString &name, QString *ret, QSet<AbstractMacroExpander*> &seen)
|
||||||
@@ -133,6 +140,7 @@ private slots:
|
|||||||
void runBlockingStdOut();
|
void runBlockingStdOut();
|
||||||
void lineCallback();
|
void lineCallback();
|
||||||
void lineCallbackIntern();
|
void lineCallbackIntern();
|
||||||
|
void waitForStartAndFinished();
|
||||||
|
|
||||||
void cleanupTestCase();
|
void cleanupTestCase();
|
||||||
|
|
||||||
@@ -158,6 +166,8 @@ void tst_QtcProcess::initTestCase()
|
|||||||
blockingStdOutSubProcessMain();
|
blockingStdOutSubProcessMain();
|
||||||
if (qEnvironmentVariableIsSet(kLineCallback))
|
if (qEnvironmentVariableIsSet(kLineCallback))
|
||||||
lineCallbackMain();
|
lineCallbackMain();
|
||||||
|
if (qEnvironmentVariableIsSet(kTestProcess))
|
||||||
|
testProcessSubProcessMain();
|
||||||
|
|
||||||
homeStr = QLatin1String("@HOME@");
|
homeStr = QLatin1String("@HOME@");
|
||||||
home = QDir::homePath();
|
home = QDir::homePath();
|
||||||
@@ -947,6 +957,25 @@ void tst_QtcProcess::lineCallbackIntern()
|
|||||||
QCOMPARE(lineNumber, lines.size());
|
QCOMPARE(lineNumber, lines.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QtcProcess::waitForStartAndFinished()
|
||||||
|
{
|
||||||
|
Environment env = Environment::systemEnvironment();
|
||||||
|
env.set(kTestProcess, {});
|
||||||
|
QStringList args = QCoreApplication::arguments();
|
||||||
|
const QString binary = args.takeFirst();
|
||||||
|
const CommandLine command(FilePath::fromString(binary), args);
|
||||||
|
|
||||||
|
QtcProcess process;
|
||||||
|
process.setCommand(command);
|
||||||
|
process.setEnvironment(env);
|
||||||
|
process.start();
|
||||||
|
QThread::msleep(1000); // long enough for process to finish
|
||||||
|
QVERIFY(process.waitForStarted());
|
||||||
|
QVERIFY(process.waitForFinished());
|
||||||
|
QVERIFY(!process.waitForFinished());
|
||||||
|
QCOMPARE(process.exitCode(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_MAIN(tst_QtcProcess)
|
QTEST_MAIN(tst_QtcProcess)
|
||||||
|
|
||||||
#include "tst_qtcprocess.moc"
|
#include "tst_qtcprocess.moc"
|
||||||
|
Reference in New Issue
Block a user