return true;
// If we wouldn't write anything, check if we can read stdout.
- if (bytesAvailableInChannel(&stdoutChannel) != 0) {
+ if (stdoutChannel.pipe[0] != INVALID_Q_PIPE
+ && bytesAvailableInChannel(&stdoutChannel) != 0) {
tryReadFromChannel(&stdoutChannel);
timer.resetIncrements();
}
// Check if we can read stderr.
- if (bytesAvailableInChannel(&stderrChannel) != 0) {
+ if (stderrChannel.pipe[0] != INVALID_Q_PIPE
+ && bytesAvailableInChannel(&stderrChannel) != 0) {
tryReadFromChannel(&stderrChannel);
timer.resetIncrements();
}
void setStandardOutputFile_data();
void setStandardOutputFile();
void setStandardOutputFile2();
+ void setStandardOutputFileAndWaitForBytesWritten();
void setStandardOutputProcess_data();
void setStandardOutputProcess();
void removeFileWhileProcessIsRunning();
QCOMPARE(all.size(), expectedsize);
}
+
+void tst_QProcess::setStandardOutputFileAndWaitForBytesWritten()
+{
+ static const char testdata[] = "Test data.";
+
+ QFile file("data");
+ QProcess process;
+ process.setStandardOutputFile(file.fileName());
+ process.start("testProcessEcho2/testProcessEcho2");
+ process.write(testdata, sizeof testdata);
+ process.waitForBytesWritten();
+ QPROCESS_VERIFY(process, waitForFinished());
+
+ // open the file again and verify the data
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QByteArray all = file.readAll();
+ file.close();
+
+ QCOMPARE(all, QByteArray::fromRawData(testdata, sizeof testdata - 1));
+}
#endif
//-----------------------------------------------------------------------------
void tst_QProcess::setStandardOutputProcess_data()
{
QTest::addColumn<bool>("merged");
- QTest::newRow("separate") << false;
- QTest::newRow("merged") << true;
+ QTest::addColumn<bool>("waitForBytesWritten");
+ QTest::newRow("separate") << false << false;
+ QTest::newRow("separate with waitForBytesWritten") << false << true;
+ QTest::newRow("merged") << true << false;
}
void tst_QProcess::setStandardOutputProcess()
{
-
QProcess source;
QProcess sink;
QFETCH(bool, merged);
+ QFETCH(bool, waitForBytesWritten);
source.setReadChannelMode(merged ? QProcess::MergedChannels : QProcess::SeparateChannels);
source.setStandardOutputProcess(&sink);
QByteArray data("Hello, World");
source.write(data);
+ if (waitForBytesWritten)
+ source.waitForBytesWritten();
source.closeWriteChannel();
QPROCESS_VERIFY(source, waitForFinished());
QPROCESS_VERIFY(sink, waitForFinished());