make tst_QProcess::softExitInSlots pass in under 120 seconds

Due to unconditional waits this test always needed 120 seconds to pass.
Now we're using QTRY_VERIFY and make sure that we write the data before
the process got killed even in the cases 3 and 4.
On my machine this test now takes 8 seconds.

Change-Id: I606a8b43ba4c97704be5202a6c5d8d1c75337f9c
Reviewed-by: Bill King <bill.king@nokia.com>
This commit is contained in:
Joerg Bornemann 2012-01-20 14:13:09 +01:00 committed by Qt by Nokia
parent 91fa4b7043
commit 06abf7934b

View File

@ -1000,9 +1000,21 @@ public:
}
}
void writeAfterStart(const char *buf, int count)
{
dataToWrite = QByteArray(buf, count);
}
void start(const QString &program)
{
QProcess::start(program);
writePendingData();
}
public slots:
void terminateSlot()
{
writePendingData(); // In cases 3 and 4 we haven't written the data yet.
if (killing || (n == 4 && state() != Running)) {
// Don't try to kill the process before it is running - that can
// be hazardous, as the actual child process might not be running
@ -1024,9 +1036,19 @@ public slots:
waitedForFinished = true;
}
private:
void writePendingData()
{
if (!dataToWrite.isEmpty()) {
write(dataToWrite);
dataToWrite.clear();
}
}
private:
int n;
bool killing;
QByteArray dataToWrite;
};
//-----------------------------------------------------------------------------
@ -1049,11 +1071,10 @@ void tst_QProcess::softExitInSlots()
for (int i = 0; i < 5; ++i) {
SoftExitProcess proc(i);
proc.writeAfterStart("OLEBOLE", 8); // include the \0
proc.start(appName);
proc.write("OLEBOLE", 8); // include the \0
QTestEventLoop::instance().enterLoop(10);
QTRY_VERIFY(proc.waitedForFinished);
QCOMPARE(proc.state(), QProcess::NotRunning);
QVERIFY(proc.waitedForFinished);
}
}