summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-07-23 17:06:53 +0200
committerJake Petroules <jake.petroules@petroules.com>2015-07-30 05:33:28 +0000
commitedb5f22b0a5f791728951bc77e272279e06b6ab6 (patch)
treef1472659384f813ca987dd84fbc4f05c343344ad /tests
parent2a382655718dcf8d00822d8fdc1dfdae1666c67e (diff)
consistently handle empty program string in QProcess::start overloads
All overloads of QProcess::start will now check whether the program string is empty and in that case - set error to FailedToStart, - set errorString to "No program defined", - emit error. Until now only one of the three overloads behaved like this. As a side effect, start(QString(), QStringList()) will not crash on Windows anymore. Task-number: QTBUG-47404 Change-Id: I2f93657204fe3643b1d74a74817843c05fc4a96b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jake Petroules <jake.petroules@petroules.com> Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/io/qprocess/tst_qprocess.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
index 0c65ceb0eb..99cb9ad6cb 100644
--- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
+++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
@@ -156,6 +156,8 @@ private slots:
void failToStart();
void failToStartWithWait();
void failToStartWithEventLoop();
+ void failToStartEmptyArgs_data();
+ void failToStartEmptyArgs();
protected slots:
void readFromProcess();
@@ -1672,6 +1674,42 @@ void tst_QProcess::failToStartWithEventLoop()
}
}
+void tst_QProcess::failToStartEmptyArgs_data()
+{
+ QTest::addColumn<int>("startOverload");
+ QTest::newRow("start(QString, QStringList, OpenMode)") << 0;
+ QTest::newRow("start(QString, OpenMode)") << 1;
+ QTest::newRow("start(OpenMode)") << 2;
+}
+
+void tst_QProcess::failToStartEmptyArgs()
+{
+ QFETCH(int, startOverload);
+ qRegisterMetaType<QProcess::ProcessError>("QProcess::ProcessError");
+
+ QProcess process;
+ QSignalSpy errorSpy(&process, static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error));
+ QVERIFY(errorSpy.isValid());
+
+ switch (startOverload) {
+ case 0:
+ process.start(QString(), QStringList(), QIODevice::ReadWrite);
+ break;
+ case 1:
+ process.start(QString(), QIODevice::ReadWrite);
+ break;
+ case 2:
+ process.start(QIODevice::ReadWrite);
+ break;
+ default:
+ QFAIL("Unhandled QProcess::start overload.");
+ };
+
+ QVERIFY(!process.waitForStarted());
+ QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+}
+
//-----------------------------------------------------------------------------
#ifndef Q_OS_WINCE
// Reading and writing to a process is not supported on Qt/CE