diff options
author | Joerg Bornemann <joerg.bornemann@theqtcompany.com> | 2015-06-05 16:57:18 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@theqtcompany.com> | 2015-12-10 16:29:33 +0000 |
commit | 068baa9bb6d526cccc0c8bc7cdbb84bbdf137f95 (patch) | |
tree | 481deaebc9fa5e8036880bf2f9f6b92101c99fce /tests/auto/corelib/io/qprocess/tst_qprocess.cpp | |
parent | 4ae0b655b270d5c8d38903b5ed960971161a672f (diff) |
add a way to modify CreateProcess parameters
[ChangeLog][QtCore][QProcess] Added method
setCreateProcessArgumentsModifier to QProcess on Windows to enable
users to intercept and modify CreateProcess parameters.
With such a modifier, calling code can decide whether to inherit
handles, modify the STARTUPINFO struct, and pass its own
combination of process flags to CreateProcess.
Task-number: QTBUG-390
Task-number: QTBUG-6917
Task-number: QTBUG-9350
Task-number: QTBUG-24619
Change-Id: I14757dbbacfebb1c89f52402d36fba0ba9c45f3a
Reviewed-by: Björn Breitmeyer <bjoern.breitmeyer@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/io/qprocess/tst_qprocess.cpp')
-rw-r--r-- | tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index 1c639c94a8..af0a1d5c37 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -138,7 +138,8 @@ private slots: void spaceArgsTest(); #if defined(Q_OS_WIN) void nativeArguments(); -#endif + void createProcessArgumentsModifier(); +#endif // Q_OS_WIN void exitCodeTest(); void systemEnvironment(); void lockupsInStartDetached(); @@ -1512,7 +1513,26 @@ void tst_QProcess::nativeArguments() QCOMPARE(actual, expected); } -#endif +void tst_QProcess::createProcessArgumentsModifier() +{ + int calls = 0; + const QString reversedCommand = "lamroNssecorPtset/lamroNssecorPtset"; + QProcess process; + process.setCreateProcessArgumentsModifier([&calls] (QProcess::CreateProcessArguments *args) + { + calls++; + std::reverse(args->arguments, args->arguments + wcslen(args->arguments) - 1); + }); + process.start(reversedCommand); + QVERIFY2(process.waitForStarted(), qUtf8Printable(process.errorString())); + QVERIFY(process.waitForFinished()); + QCOMPARE(calls, 1); + + process.setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier()); + QVERIFY(!process.waitForStarted()); + QCOMPARE(calls, 1); +} +#endif // Q_OS_WIN void tst_QProcess::exitCodeTest() { |