Git commit 6097809c366a79cd0173e0aecbf490d4a1cb6a49 by Patrick Spendrin. Committed on 30/11/2015 at 13:08. Pushed by sengels into branch 'master'. add old test case M +3 -0 tests/CMakeLists.txt A +100 -0 tests/processtester.cpp [License: UNKNOWN] * The files marked with a * at the end have a non valid license. Please read:= http://techbase.kde.org/Policies/Licensing_Policy and use the headers whic= h are listed at that page. http://commits.kde.org/kcwsh/6097809c366a79cd0173e0aecbf490d4a1cb6a49 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7246da8..ea3b264 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,9 +5,12 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) # simple applications that provoke a specific behaviour add_executable(scrolltester scrolltester.cpp) add_executable(titletester titletester.cpp) +add_executable(processtester processtester.cpp) +target_link_libraries(processtester kcw) = add_executable(terminaltest terminaltest.cpp) target_link_libraries(terminaltest kcwsh) add_test(NAME simpletest COMMAND terminaltest simple echo) add_test(NAME titletest COMMAND terminaltest title $ ) add_test(NAME resizetest COMMAND terminaltest resize echo) +add_test(NAME processtest COMMAND terminaltest process $) diff --git a/tests/processtester.cpp b/tests/processtester.cpp new file mode 100644 index 0000000..e76e874 --- /dev/null +++ b/tests/processtester.cpp @@ -0,0 +1,100 @@ +#include +#include +#include + +#include + +#include +#include + +using namespace std; + +class ProcessTest : public KcwEventLoop { + public: + ProcessTest() : m_runningProcesses(0) {} + ~ProcessTest() { + while(!m_processes.empty()) { + delete m_processes.back(); + m_processes.pop_back(); + } + } + void case1(const wstring& executable) { + KcwProcess *p1 =3D new KcwProcess; + p1->setCmd(executable + L" " + L" stop"); + p1->setIsStartedAsPaused(true); p1->setStartupAsHidden(); + p1->start(); + addCallback(p1->process(), CB(processFinished)); + p1->resume(); + m_runningProcesses++; + m_processes.push_back(p1); + Sleep(1000); + KcwProcess *p2 =3D new KcwProcess; + p2->setCmd(executable + L" " + L" fork"); + p2->setIsStartedAsPaused(true); p2->setStartupAsHidden(); + p2->start(); + addCallback(p2->process(), CB(processFinished)); + p2->resume(); + m_runningProcesses++; + m_processes.push_back(p2); + } + + void case2fork(const wstring& executable) { + KcwProcess *p1 =3D new KcwProcess; + p1->setCmd(executable + L" " + L" stop"); + p1->setIsStartedAsPaused(true); p1->setStartupAsHidden(); + p1->start(); + addCallback(p1->process(), CB(processFinished)); + p1->resume(); + m_runningProcesses++; + m_processes.push_back(p1); + Sleep(1000); + KcwProcess *p2 =3D new KcwProcess; + p2->setCmd(executable + L" " + L" stop"); + p2->setIsStartedAsPaused(true); p2->setStartupAsHidden(); + p2->start(); + addCallback(p2->process(), CB(processFinished)); + p2->resume(); + m_runningProcesses++; + m_processes.push_back(p2); + } + + KCW_CALLBACK(ProcessTest, processFinished); + + vector m_processes; + int m_runningProcesses; +}; + +void ProcessTest::processFinished() { + if(!(m_runningProcesses--)) quit(); +} + +int main() { + int argc; + wchar_t **argv =3D CommandLineToArgvW(GetCommandLineW(), &argc); + vector args; + for(int i =3D 0; i < argc; i++) args.push_back(wstring(argv[i])); + wcout << "another process called" << endl; + ProcessTest l; + switch(argc) { + case 1: l.case1(args[0]); break; + case 2: { = + if(args[1] =3D=3D L"stop") { + Sleep(5000); + return 0; + } else if(args[1] =3D=3D L"fork") { + l.case2fork(args[0]); break; + return 0; + } else { + return 0; + } + break; + } + default: { + wcout << L"test executable for kcwsh, plz read source code" <<= endl; + return -1; + } + }; + l.exec(); + Sleep(1000); + return 0; +} \ No newline at end of file