Add a test for waitingForStarted and waitingForFinished

Change-Id: I2d38bb2d37a71aad6d762aa68f1f3b329a4fa302
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2021-08-24 18:15:54 +02:00
parent 1a5db9ca4e
commit 43b82bfc5f

View File

@@ -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"