summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io/qprocess
Commit message (Collapse)AuthorAgeFilesLines
* Fix tst_QProcess::closeWriteChannel() under WindowsAlex Trotsenko2016-08-051-6/+9
| | | | | | | | | | | | Sometimes, this test fails in CI due to notifications arriving asynchronously from the OS. This happens inside closeWriteChannel() call, where we are flushing the write buffer and I/O completion on the read pipe could occur there as well. So, take this into account before waiting for the new incoming data. Also, improve the checks on successful reading and writing. Change-Id: Iabe875fc346eb4420c72d03208d22ea861a570c6 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Remove QPROCESS_USE_SPAWN and all that it surroundsJames McDonnell2016-03-221-28/+10
| | | | | | | | | | | | | | | | | | | | | | The spawn code was only used to make QProcess work on QNX 6.5.0. Fork works on QNX 6.6.0. The QNX spawn implementation has a flaw that causes a deadlock in certain situations. When a working directory is specified for the process, the QNX spawn implementation stops all threads except the one doing the spawn so that it can temporarily change the process' working directory. This can lead to a deadlock if the thread does anything that conficts with something being done in a stopped thread. QNX 6.5.0 is no longer supported in Qt 5.6.0 so we can just switch QNX to the fork implementation and get rid of the spawn implementation. Made a QNX specific adjustment to the hardExit test. There's a bug in the OS that the test can run into because it does something that normal applications wouldn't. Task-number: QTBUG-47250 Change-Id: Ib32567d2c15ce651815858000035ac5aa6f35224 Reviewed-by: Dan Cape <dcape@qnx.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
* Fix crash in QProcess::waitForFinished on WindowsJoerg Bornemann2016-02-291-0/+33
| | | | | | | | | | | | | | | | | | | Suppose the user connects QProcess::readyReadStandardOutput with a slot that calls QCoreApplication::processEvents. Assume the event loop did not handle events between QProcess::start and QProcess::waitForFinished. The process writes to stdout and exits. QProcessPrivate::waitForFinished calls drainOutputPipes which calls QWindowsPipeWriter::waitForReadyRead. This in turn will trigger _q_processDied via the readyRead signal and processEvents. _q_processDied will delete the pid object and set pid to null. After drainOutputPipes returns, _q_processDied is called again but it must not be called if pid is already destroyed. Prevent calling _q_processDied if pid is null. Task-number: QTBUG-48697 Change-Id: Iee047938ee1529057a1a43d71f4e882750903c7e Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* Remove superfluous Windows CE special cases from tst_qprocess.cppJoerg Bornemann2016-02-291-29/+6
| | | | | | | | | | | Use default timeouts for wait functions. The increased timeouts will only have an effect if the tests fail. Print process errors if the process could not be started, while we're at it. Contract consecutive "#ifndef Q_OS_WINCE" blocks. Change-Id: I6324e4c5b91b89ebb2580635b88705bbda922907 Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
* Remove legacy from tst_qprocess.cppJoerg Bornemann2016-02-241-8/+0
| | | | | | | | | The windows.h include is not needed, the enums are properly known to the metaobject system nowadays, and qprocess_p.h already has a QT_NO_PROCESS guard. Change-Id: I6bbdce19f097feb8260c51a29425279049aa0192 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
* tst_QProcess: Transform loop into additional test rowsJoerg Bornemann2016-02-241-9/+18
| | | | | | | | | | Do not use a loop to execute similar but separate tests in tst_QProcess::softExitInSlots. Use separate test rows with distinguishable data tags instead. This way we can deduce from CI output which part of this test failed. Change-Id: Ic9bc996f2ced11b2bb1c33c1970e64937d860976 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
* tst_QProcess: Use a QTemporaryDir for files to be created.Friedemann Kleint2015-11-261-12/+18
| | | | | | | | | | | | Ensure the test works in a working directory with read-only permission and that the file names are unique. The test can then be executed repeatedly by COIN even in case left-over hanging process helpers still lock the files. Also disambiguate the "data" files used by various tests. Task-number: QTBUG-47370 Change-Id: I3b9c7b70828da78f400196fcbba27bc61ea4538f Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
* tst_QProcess: Remove macro QPROCESS_VERIFY().Friedemann Kleint2015-11-251-15/+7
| | | | | | | | | | | | | | | It was used to verify waitForFinished() and printed QProcess::errorString() on failure, which is misleading, since the process is not in an error state - it is still running. Example: QWARN : tst_QProcess::setStandardOutputFileAndWaitForBytesWritten() QProcess error: 5: Unknown error FAIL! : tst_QProcess::setStandardOutputFileAndWaitForBytesWritten() 'ret' returned FALSE. () Use a plain QVERIFY instead. Task-number: QTBUG-47370 Change-Id: Iacfa6e1a5ffd2be4e1257a27a400ccc59671e8c8 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
* MSVC2015: Blacklist tests reading from stdin in buffered/text mode.Friedemann Kleint2015-09-301-0/+3
| | | | | | | | | | | | | | - tst_QProcess::fileWriterProcess() - tst_QProcess::readLineStdin() - [tst_QProcess::readLineStdin_lineByLine() The test fails apparently due to a bug in its runtime library (fread() dropping data). Task-number: QTBUG-48455 Task-number: QTBUG-48504 Change-Id: I972e560e88312cea0d3dbcea9450c59285a15d5a Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
* tst_qprocess: Improve handling of helpers.Friedemann Kleint2015-09-304-17/+99
| | | | | | | | | | | Verify exit status and code where applicable. Avoid unnecessary data conversions in fileWriterProcess. Improve error handling in helper processes. Task-number: QTBUG-47370 Task-number: QTBUG-48455 Change-Id: Ib5c4f546027131db02caaa05154a5880edac5cf7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* tst_qprocess: Instantiate QProcess objects on the stack.Friedemann Kleint2015-09-251-165/+141
| | | | | | | | | | | | Instantiate the QProcess object on the stack to ensure resource cleanup and remove the QProcess * member variable. Use qobject_cast<QProcess *>(QObject::sender()) instead of the member variable in the helpers slots to ensure that signals from a leaked QProcess do not interfere with other tests. Task-number: QTBUG-47370 Change-Id: Ifc0dccb7e4b18069d236df53bccdcb6a47df6346 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* tst_qprocess: Port to Qt 5 connection syntax.Friedemann Kleint2015-09-251-46/+54
| | | | | | Task-number: QTBUG-47370 Change-Id: I09489a6fb4598238fa5e0120bf751fe5af6f31af Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Merge remote-tracking branch 'origin/5.5' into 5.6Liang Qi2015-08-264-20/+212
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: qmake/doc/snippets/code/doc_src_qmake-manual.pro qmake/doc/src/qmake-manual.qdoc src/corelib/io/qstorageinfo_unix.cpp src/corelib/tools/qbytearray.cpp src/widgets/kernel/qwidgetwindow.cpp tests/auto/corelib/io/qprocess/tst_qprocess.cpp tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp tests/auto/network/access/qnetworkreply/BLACKLIST Change-Id: I9efcd7e1cce1c394eed425c43aa6fce7d2edf31c
| * tst_qprocess cleanupJoerg Bornemann2015-08-171-17/+15
| | | | | | | | | | | | | | | | Give setStandardOutputFile2 a sensible name, move it to where it belongs and remove bogus Q_OS_WINCE ifdef. Change-Id: I5c843e8b6cb626979966f3e61f7a7c720173bb28 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
| * fix assertion in QProcess/WinJoerg Bornemann2015-08-171-3/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | Do not call bytesAvailableInChannel if the source pipe end is invalid. This is the case when redirecting channels on Windows. The assertions in bytesAvailableInChannel were triggered whenever an output process or output file was set and waitForBytesWritten was called. Task-number: QTBUG-45548 Change-Id: I225dfea2c5e27e122f75008a3a06d425554e00fe Reviewed-by: Alex Trotsenko <alex1973tr@gmail.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
| * QProcess: Ensure that the stdin buffer is cleared on start()Thiago Macieira2015-08-154-0/+169
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The buffer may have been left dirty if we were unable to write all the data to the child process in the previous run. So ensure we clear it before starting a new one. We already did that for stdout and stderr, for some reason. Task-number: QTBUG-44517 Change-Id: I1a800c709d3543699131ffff13c419da3bbffacf Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | remove pointless function separator comments from tst_qprocessJoerg Bornemann2015-08-261-67/+3
| | | | | | | | | | | | | | | | Newer test functions don't have those. Removing those comments makes the code consistent. Change-Id: I542b89e797ef061395ce1fc87d848195e6f81f35 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
* | QProcess: discard unwanted output from the child processAlex Trotsenko2015-08-161-0/+20
| | | | | | | | | | | | | | | | | | | | Drop process output to nullDevice(), if an application does not request forwarding, redirecting or reading from the device channel. This prevents from accumulation of unnecessary data which can not be read. Change-Id: Ia311a8c658a46cf580ffa9484c5369f3fc5f98a7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | Merge remote-tracking branch 'origin/5.5' into devFrederik Gladhorn2015-08-061-0/+38
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: doc/global/qt-cpp-defines.qdocconf src/3rdparty/forkfd/forkfd.c src/corelib/codecs/qtextcodec.cpp src/corelib/kernel/qmetatype.cpp src/corelib/tools/qset.qdoc src/gui/accessible/qaccessible.cpp src/gui/image/qpixmapcache.cpp src/opengl/qgl.cpp src/tools/qdoc/generator.cpp src/widgets/kernel/qwidget.cpp tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp Change-Id: I4fbe1fa756a54c6843aa75f4ef70a1069ba7b085
| * consistently handle empty program string in QProcess::start overloadsJoerg Bornemann2015-07-301-0/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | QProcess: make setWorkingDirectory stop launch if the dir doesn't existThiago Macieira2015-07-201-5/+27
| | | | | | | | | | | | | | | | | | | | [ChangeLog][QtCore][QProcess] Fixed a bug that caused QProcess to launch a child process on Unix even if the directory specified with setWorkingDirectory did not exist. Task-number: QTBUG-47271 Change-Id: Ib306f8f647014b399b87ffff13f195158b0e52f5 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | Core: Replace QProcess::error signal with QProcess::errorOccurredKai Koehne2015-07-101-11/+37
| | | | | | | | | | | | | | | | | | | | | | Make the name of the signal and the name of the getter unambiguous, which in turn allows the easy use of Qt 5-style connects. [ChangeLog][QtCore] Deprecated QProcess::error() signal in favor of new QProcess::errorOccurred() one. Change-Id: Ic5bcf7d6878e6985f1b4fed9dbe247527d13758c Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | Merge remote-tracking branch 'origin/5.5' into devLiang Qi2015-07-012-2/+2
|\| | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/global/qglobal.cpp src/corelib/global/qglobal.h src/corelib/global/qsysinfo.h src/corelib/global/qsystemdetection.h src/corelib/kernel/qobjectdefs.h src/plugins/plugins.pro tests/auto/widgets/itemviews/qlistview/qlistview.pro Change-Id: Ib55aa79d707c4c1453fb9d697f6cf92211ed665c
| * Replace MAC OS X with OS XNico Vertriest2015-06-301-1/+1
| | | | | | | | | | | | Task-number: QTBUG-46374 Change-Id: I7bc633ab551740bd328a24b0ccae1d534af47138 Reviewed-by: Martin Smith <martin.smith@digia.com>
| * fix usage of wince scopeOswald Buddenhagen2015-06-051-1/+1
| | | | | | | | | | | | | | Fix style issues along the way. Change-Id: Ic6a6de28e198eb0b14c198b802e78845703909b9 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* | Blacklist and skip various tests that are flakeySimon Hausmann2015-06-141-0/+2
|/ | | | | | | | | | They didn't show up in the "old" CI runs because they usually pass the second time they are executed - which the testrunner does. The new CI doesn't do that anymore, instead we now mark those tests explicitly and will track their record of passing and failing in the new metrics database. Change-Id: Id34dd6f792f38995b07b6fec88f833df64de2f8b Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Update copyright headersJani Heikkinen2015-02-1122-154/+154
| | | | | | | | | | | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Outdated header.LGPL removed (use header.LGPL21 instead) Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing combination. New header.LGPL-COMM taken in the use file which were using old header.LGPL3 (src/plugins/platforms/android/extract.cpp) Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license combination Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
* Fix tst_process on QNX when using spawnRafael Roquetto2015-01-231-5/+5
| | | | | | | | QNX posix_spawn() implementation actually allows for detecting whether a non-existent process has failed to start. Change-Id: Ic1bf8da0d4636f1d7d9b7b4cf6ad45376f6df0ed Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Handle posix_spawn using exit code 127 to indicate fail-to-startThiago Macieira2015-01-231-3/+5
| | | | | | | | | Most posix_spawn implementations are done using fork(), so the only way to report errors afer fork() is via a special exit code. Reference: http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_spawn.html Change-Id: I3a37f81b0cb278bb31e5cb83c87e6b4c034dbc19 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Use forkfd in QProcessThiago Macieira2015-01-232-1/+23
| | | | | | | | | | | | | | | | | | | | Replace the existing code in QProcess that dealt with signaling of child processes exiting with forkfd and spawnfd. The previous code was convoluted and hard to maintain, having shown its age in the last year. I've been running it for a year and a half and the new implementation is definitely an improvement. This change replaces support for the QNX Neutrino spawn() call with the POSIX version. We lose the ability to do setsid(), but we gain quite a few ioctls() that were done to fill in the file descriptor mapping structure. That's also the only OS for which we have the ability to thread-safely chdir() before the call to spawnfd(). Another advantage is that forkfd does not require a dedicated thread running to handle child processes exiting. Change-Id: I5eb76821dfdb6a8ed2989d7f53b3c31e515c3174 Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
* Use waitid with WNOWAIT in forkfdThiago Macieira2015-01-231-15/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous implementation required one syscall per child we're waiting on to see which one exited. That means the algorithm was O(n). This implementation uses WNOWAIT to find out which child exited and then goes straight to that one. So it's O(1) on the number of children, but runs 2 * number_of_children_that_exited + 1 syscalls, assuming there are no race conditions with other threads. If there are or if a child not started by forkfd exits, we'll still iterate over each child we're managing to see which one exited. It modifies the existing code so that it will do a waitid() with WNOWAIT to check on the status of the child: if the child has exited, we'll try to lock the entry so only one thread will do the final wait(). In the case we read the PID, then the child exited, was reaped by another thread, the PID got recycled and that child exited again, we'll fail to lock the ProcessInfo entry so no harm comes. If by an absurd coincidence this other child was started by forkfd() and its ProcessInfo is exactly the one we are looking at, then we'll succeed in locking but that's a benign race: we'll do what the other thread was trying to do and the other thread will give up. Future improvements to the algorithm are discussed in the Gerrit change. Change-Id: Ie74836dbc388cd9b3fa375a41a8d944602a32df1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Update license headers and add new license filesMatti Paaso2014-09-2422-418/+242
| | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 - Removed LICENSE.GPL Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
* Merge remote-tracking branch 'origin/5.3' into devFrederik Gladhorn2014-07-012-2/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: mkspecs/qnx-x86-qcc/qplatformdefs.h src/corelib/global/qglobal.h src/network/socket/qnativesocketengine_winrt.cpp src/plugins/platforms/android/androidjniaccessibility.cpp src/plugins/platforms/windows/qwindowswindow.cpp Manually adjusted: mkspecs/qnx-armle-v7-qcc/qplatformdefs.h to include 9ce697f2d54be6d94381c72af28dda79cbc027d4 Thanks goes to Sergio for the qnx mkspecs adjustments. Change-Id: I53b1fd6bc5bc884e5ee2c2b84975f58171a1cb8e
| * QProcess: Handle spurious socket notifications for stdout and stderrThiago Macieira2014-06-122-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On Unix systems where the GUI event dispatcher uses a notification system for socket notifiers that is out of band compared to select(), it's possible for the QSocketNotifier to activate after the pipe has been read from. When that happened, the ioctl(2) call with FIONREAD might return 0 bytes available, which we interpreted to mean EOF. Instead of doing that, always try to read at least one byte and examine the returned byte count from read(2). If it returns 0, that's a real EOF; if it returns -1 EWOULDBLOCK, we simply ignore the situation. That's the case on OS X: the Cocoa event dispatcher uses CFSocket to get notifications and those use kevent (and, apparently, an auxiliary thread) instead of an in-thread select() or poll(). That means the event loop would activate the QSocketNotifier even though there is nothing to be read. Task-number: QTBUG-39488 Change-Id: I1a58b5b1db7a47034fb36a78a005ebff96290efb Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* | Updated corelib's unit tests to use QSignalSpy's functor constructorKeith Gardner2014-05-081-28/+28
|/ | | | | | | | | The intent is to provide compile time validation of signals and to help detect signal overloading in the future. Change-Id: I9d5d46ed4b70c5d0cd407deb5928b1e76d37e007 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* Stabilize tst_QProcess::softExitInSlots()Sergio Ahumada2014-03-271-1/+1
| | | | | | | | | | | | This test takes more than 5000ms to finish some times, so waiting for 10000ms should be enough to make it more stable on all platforms. ../tst_qprocess.cpp:1072 :: [gui app] QTestLib: This test case check ("proc.waitedForFinished") failed because the requested timeout (5000 ms) was too short, 6150 ms would have been sufficient this time. Change-Id: I266ad0e65bf3c84e73b7ca6543dc15335dad4c99 Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
* Add function to get the actual PID from QProcessChristian Strømme2014-02-141-1/+3
| | | | | | | | | | | | | | | | | | | | It was not possible to get the actual process ID (in a cross-platform manner) from QProcess, as the user would need to handle the returned typedef (Q_PID) differently on Unix and Windows. On Unix Q_PID is the actual process ID, but on Windows it's a pointer to a PROCESS_INFORMATION structure, which among other fields contains the process ID. Instead of returning a pointer on Windows, QProcess::processId() will return the actual process ID on both Windows and Unix. [ChangeLog][QtCore][QProcess] Added processId() to QProcess. This function will, unlike pid(), return the actual process identifier on both Window and Unix. Task-number: QTBUG-26136 Change-Id: I853ab721297e2dd9cda006666144179a9e25b73d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Replace win32-g++ with mingw scopeKai Koehne2014-01-171-1/+1
| | | | | | | | Commit 773dd01 introduced a general mingw platform scope, which is cleaner and more flexible than matching the spec name. Change-Id: Ie3a9cb791a83f7c8a51bc4e23069190c452ab521 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QProcess/Win: allow child processes to change modes of the stdin pipeJoerg Bornemann2013-12-104-1/+71
| | | | | | | | | | | | | | | | | | | | To be able to call SetNamedPipeHandleState on stdin in a child process, we must create a read-end pipe handle with the FILE_WRITE_ATTRIBUTES flag set. This can't be done with CreateNamedPipe but only with CreateFile. Therefore we're creating the handles for the child process always with CreateFile now. Besides, it's conceptually cleaner to have the server handle of the named pipe in the calling process. [ChangeLog][QtCore][Windows] Fix regression from Qt4 in QProcess. It wasn't possible anymore to alter pipe modes of stdin in child processes. Task-number: QTBUG-35357 Change-Id: I85f09753d0c924bdc8a6cef1ea5dbe6b2299c604 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* fix Windows CE commentsJoerg Bornemann2013-12-091-2/+1
| | | | | Change-Id: Ib42c456c236f59727dddd6a111dfe0946fff1aef Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* add QProcess::InputChannelModeOswald Buddenhagen2013-09-052-7/+19
| | | | | | | | | | | this enables forwarding standard input from the parent process. Change-Id: I7ee72b9842acc96320d4da693b95dd15d9a7b4d4 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
* add QProcess::Forwarded{Output,Error}ChannelOswald Buddenhagen2013-09-052-9/+43
| | | | | | | Change-Id: Ifc5ed20c38f3228ef25c28681f296d0456b61abe Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* fix warnings - qprocess needs a qcoreapp instanceOswald Buddenhagen2013-09-051-1/+4
| | | | | Change-Id: Icf36c2e76595d8f2ed470da13e78c465cfa962f9 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* remove redundant forwardedChannels() testOswald Buddenhagen2013-09-051-21/+0
| | | | | | | | | forwardedChannelsOutput() actually tests forwarding. also having the older test only eats CPU cycles. rename the new test to the old name for clarity. Change-Id: I16a326c8692bb594d7df7897bc53d31b23c66d90 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* make error reporting in forwardedChannelsOutput test more usefulOswald Buddenhagen2013-09-052-6/+16
| | | | | Change-Id: I0350ddfd6740d2a2cd3e0f49220cdaa83b854abf Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* micro-optimization/-clarificationOswald Buddenhagen2013-09-051-4/+4
| | | | | | | | | close stdin and let the process finish right away instead of first waiting for a reaction (which is not supposed to come) and then finishing. Change-Id: Ifcf200eead5ed95217843e105f9d2dbb5398d646 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* add QProcess::nullDevice()Oswald Buddenhagen2013-08-301-0/+25
| | | | | | Change-Id: I15273fa3f3ba323a835350153f2a20404f12420b Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix crash in QProcess::waitForStarted() on Unix.Christian Strømme2013-08-131-0/+7
| | | | | | | | | | | | Invoking waitForStarted() on a QProcess before or after an unsuccessful call to start() (e.g., with an empty command), would execute FD_SET with an invalid file descriptor and cause the process to abort. The bug can be reliably reproduced on OSX. Task-number: QTBUG-32958 Change-Id: Id25b7781168489281645e21571361ca1a71d43e3 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix incomplete override of QIODevice::open in QProcess and QLocalSocketThiago Macieira2013-07-201-0/+20
| | | | | | | | | | | | | | | | | | | The rule for a new override is that it must still work if the old implementation is called. The catch is that any class that derives from QProcess and isn't recompiled will still have QIODevice::open in its virtual table. That is equivalent to overriding open() and calling QIODevice::open() (like the tests). In Qt 5.0, QProcess::start() called QIODevice::open directly, not the virtual open(), so there's no expectation that a user-overridden open() be called. With that in mind, simply fix QProcess::start to not call the virtual open at all. Similarly with QLocalSocket, the calls to open were always non-virtual. Task-number: QTBUG-32284 Change-Id: I88925f0ba08bc23c849658b54582744997e69a4c Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* remove wait calls in tst_QProcess::simpleStartJoerg Bornemann2013-07-021-9/+1
| | | | | | | | | Instead of calling different wait functions on different platforms, we use QTRY_COMPARE to check the process state. Change-Id: I6489cabce9e63f9c8b1036f3cccbf35b52df72e7 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com>