diff options
-rw-r--r-- | src/corelib/io/qprocess.cpp | 12 | ||||
-rw-r--r-- | tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 38 |
2 files changed, 49 insertions, 1 deletions
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index 1842541644..914774b433 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -2062,6 +2062,13 @@ void QProcess::start(const QString &program, const QStringList &arguments, OpenM qWarning("QProcess::start: Process is already running"); return; } + if (program.isEmpty()) { + Q_D(QProcess); + d->processError = QProcess::FailedToStart; + setErrorString(tr("No program defined")); + emit error(d->processError); + return; + } d->program = program; d->arguments = arguments; @@ -2086,7 +2093,10 @@ void QProcess::start(OpenMode mode) return; } if (d->program.isEmpty()) { - qWarning("QProcess::start: program not set"); + Q_D(QProcess); + d->processError = QProcess::FailedToStart; + setErrorString(tr("No program defined")); + emit error(d->processError); return; } 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 |