diff options
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r-- | tests/auto/corelib/io/qprocess/testForwarding/main.cpp | 21 | ||||
-rw-r--r-- | tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 31 |
2 files changed, 43 insertions, 9 deletions
diff --git a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp index 3122232ee1..deff2b95ad 100644 --- a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp +++ b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp @@ -42,30 +42,41 @@ #include <QtCore/QCoreApplication> #include <QtCore/QProcess> +#include <stdlib.h> + int main(int argc, char **argv) { QCoreApplication app(argc, argv); + if (argc < 2) + return 13; + #ifndef QT_NO_PROCESS QProcess process; - process.setProcessChannelMode(QProcess::ForwardedChannels); - if (process.processChannelMode() != QProcess::ForwardedChannels) + + QProcess::ProcessChannelMode mode = (QProcess::ProcessChannelMode)atoi(argv[1]); + process.setProcessChannelMode(mode); + if (process.processChannelMode() != mode) return 1; - process.start("testProcessEcho/testProcessEcho"); + process.start("testProcessEcho2/testProcessEcho2"); if (!process.waitForStarted(5000)) return 2; - if (process.write("forwarded\n") != 10) + if (process.write("forwarded") != 9) return 3; process.closeWriteChannel(); if (!process.waitForFinished(5000)) return 4; - if (process.bytesAvailable() != 0) + if ((mode == QProcess::ForwardedOutputChannel || mode == QProcess::ForwardedChannels) + && !process.readAllStandardOutput().isEmpty()) return 5; + if ((mode == QProcess::ForwardedErrorChannel || mode == QProcess::ForwardedChannels) + && !process.readAllStandardError().isEmpty()) + return 6; #endif return 0; } diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index 183f827836..e03c1fb75e 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -107,6 +107,7 @@ private slots: void softExitInSlots_data(); void softExitInSlots(); void mergedChannels(); + void forwardedChannels_data(); void forwardedChannels(); void atEnd(); void atEnd2(); @@ -1089,10 +1090,31 @@ void tst_QProcess::mergedChannels() //----------------------------------------------------------------------------- #ifndef Q_OS_WINCE // Reading and writing to a process is not supported on Qt/CE + +void tst_QProcess::forwardedChannels_data() +{ + QTest::addColumn<int>("mode"); + QTest::addColumn<QByteArray>("outdata"); + QTest::addColumn<QByteArray>("errdata"); + + QTest::newRow("separate") << int(QProcess::SeparateChannels) + << QByteArray() << QByteArray(); + QTest::newRow("forwarded") << int(QProcess::ForwardedChannels) + << QByteArray("forwarded") << QByteArray("forwarded"); + QTest::newRow("stdout") << int(QProcess::ForwardedOutputChannel) + << QByteArray("forwarded") << QByteArray(); + QTest::newRow("stderr") << int(QProcess::ForwardedErrorChannel) + << QByteArray() << QByteArray("forwarded"); +} + void tst_QProcess::forwardedChannels() { + QFETCH(int, mode); + QFETCH(QByteArray, outdata); + QFETCH(QByteArray, errdata); + QProcess process; - process.start("testForwarding/testForwarding"); + process.start("testForwarding/testForwarding", QStringList() << QString::number(mode)); QVERIFY(process.waitForStarted(5000)); QVERIFY(process.waitForFinished(5000)); const char *err; @@ -1103,12 +1125,13 @@ void tst_QProcess::forwardedChannels() case 3: err = "failed to write"; break; case 4: err = "did not finish"; break; case 5: err = "unexpected stdout"; break; + case 6: err = "unexpected stderr"; break; + case 13: err = "parameter error"; break; default: err = "unknown exit code"; break; } QVERIFY2(!process.exitCode(), err); - QByteArray data = process.readAll(); - QVERIFY(!data.isEmpty()); - QVERIFY(data.contains("forwarded")); + QCOMPARE(process.readAllStandardOutput(), outdata); + QCOMPARE(process.readAllStandardError(), errdata); } #endif |