11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
18 TEST_CLASS_INITIALIZE (ClassInitialize)
20 Logger::WriteMessage (
"ProcessTest class initialize.\n");
23 TEST_CLASS_CLEANUP (ClassCleanup)
25 Logger::WriteMessage (
"ProcessTest class cleanup.\n");
28 TEST_METHOD_INITIALIZE (MethodInitialize)
30 Logger::WriteMessage (
"ProcessTest method initialize.\n");
33 TEST_METHOD_CLEANUP (MethodCleanup)
35 Logger::WriteMessage (
"ProcessTest method cleanup.\n");
38 TEST_METHOD (ConsoleProcessTest1)
41 TCHAR tszCmdline[MAX_PATH]{ _T (
"PING www.yahoo.co.jp") };
42 BOOL ret = process.
Create (
nullptr, tszCmdline);
43 Assert::IsTrue (ret, _T (
"Process::Create() failed.\n"));
48 auto ReadBuffer = [&]()
50 ZeroMemory (szBuf,
sizeof (szBuf));
51 dwSize = process.
Peek (szBuf,
sizeof (szBuf) - 1);
54 dwSize = process.
Read (szBuf, dwSize);
55 Logger::WriteMessage (szBuf);
63 DWORD dwRet = process.
Wait (500);
64 if (dwRet == WAIT_TIMEOUT)
66 Logger::WriteMessage (_T (
"WAIT_TIMEOUT & continue.\n"));
69 if (dwRet == WAIT_OBJECT_0)
72 Logger::WriteMessage (_T (
"WAIT_OBJECT_0 & break.\n"));
79 Assert::AreEqual<DWORD> (0, dwExitCode, _T (
"Process::GetExitCode() not return 0.\n"));
82 TEST_METHOD (ConsoleProcessTest2)
85 TCHAR tszCmdline[MAX_PATH]{ _T (
"PING -t 127.0.0.1") };
87 process.
SetTitle (_T (
"ConsoleProcessTest2"));
89 BOOL ret = process.
Create (
nullptr, tszCmdline);
90 Assert::IsTrue (ret, _T (
"Process::Create() failed.\n"));
95 auto ReadBuffer = [&]()
97 ZeroMemory (szBuf,
sizeof (szBuf));
98 dwSize = process.
Peek (szBuf,
sizeof (szBuf) - 1);
101 dwSize = process.
Read (szBuf, dwSize);
102 Logger::WriteMessage (szBuf);
106 for (
int retry = 0; retry < 10;)
110 DWORD dwRet = process.
Wait (500);
111 if (dwRet == WAIT_TIMEOUT)
113 Logger::WriteMessage (_T (
"WAIT_TIMEOUT & continue.\n"));
117 if (dwRet == WAIT_OBJECT_0)
120 Logger::WriteMessage (_T (
"WAIT_OBJECT_0 & break.\n"));
126 Assert::IsTrue (process.
Terminate (), _T (
"Process::Terminate() failed.\n"));
127 process.
Wait (INFINITE);
129 Assert::AreEqual<DWORD> (0, dwExitCode, _T (
"Process::GetExitCode() not return 0.\n"));
132 TEST_METHOD (ConsoleProcessTest5)
135 TCHAR tszCmdline[MAX_PATH]{ _T (
"CMD /K") };
136 process.
SetTitle (_T (
"ConsoleProcessTest5"));
138 BOOL ret = process.
Create (NULL, tszCmdline);
139 Assert::IsTrue (ret, _T (
"Process::Create() failed.\n"));
144 auto ReadBuffer = [&]()
146 ZeroMemory (szBuf,
sizeof (szBuf));
147 dwSize = process.
Peek (szBuf,
sizeof (szBuf) - 1);
150 dwSize = process.
Read (szBuf, dwSize);
151 Logger::WriteMessage (szBuf);
155 sprintf_s (szBuf,
"DIR C:\\Windows\r\n");
156 dwSize = (DWORD)strlen (szBuf);
158 DWORD dwWrite = process.
Write (szBuf, dwSize);
159 Assert::AreEqual<DWORD> (dwWrite, dwSize, _T (
"Process::Write() return invalid size.\n"));
161 for (
int retry = 0; retry < 10;)
165 DWORD dwRet = process.
Wait (100);
166 if (dwRet == WAIT_TIMEOUT)
171 if (dwRet == WAIT_OBJECT_0)
179 Assert::IsTrue (process.
Terminate (), _T (
"Process::Terminate() failed.\n"));
180 process.
Wait (INFINITE);
182 Assert::AreEqual<DWORD> (0, dwExitCode, _T (
"Process::GetExitCode() not return 0.\n"));
185 TEST_METHOD (WindowProcessTest1)
188 TCHAR tszCmdline[MAX_PATH]{ _T (
"NotePad.exe ..\\..\\README.MD") };
190 BOOL ret = process.
Create (NULL, tszCmdline);
191 Assert::IsTrue (ret, _T (
"Process::Create() failed.\n"));
194 Assert::IsTrue (process.
Terminate (), _T (
"Process::Terminate() failed.\n"));
195 process.
Wait (INFINITE);
197 Assert::AreEqual<DWORD> (0, dwExitCode, _T (
"Process::GetExitCode() not return 0.\n"));
200 TEST_METHOD (WindowProcessTest2)
203 TCHAR tszCmdline[MAX_PATH]{ _T (
"NotePad.exe ..\\..\\README.MD") };
205 BOOL ret = process.
Create (NULL, tszCmdline);
206 Assert::IsTrue (ret, _T (
"Process::Create() failed.\n"));
209 Assert::IsTrue (process.
Terminate (), _T (
"Process::Terminate() failed.\n"));
210 process.
Wait (INFINITE);
212 Assert::AreEqual<DWORD> (0, dwExitCode, _T (
"Process::GetExitCode() not return 0.\n"));
ファイルハンドルを伴わないファイルIOに関するWindowsAPIを集約した クラス
プロセスに関するWindowsAPIを集約したクラス
文字列に関するWindowsAPIを集約したクラス
プロセスに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(LPCTSTR lpctszApplicationName, LPTSTR lptszCommandLine, LPCTSTR lpctszCurrentDirectory=NULL)
プロセスの作成
DWORD APIENTRY Peek(LPVOID lpvBuf, DWORD dwSize) const
プロセス出力内容の読み込み
DWORD APIENTRY Write(LPVOID lpvBuf, DWORD dwSize) const
プロセス入力への書き込み
BOOL APIENTRY Terminate() const
プロセスの強制終了
VOID APIENTRY SetTitle(LPTSTR lptszConsoleTitle)
コンソールタイトルの設定
DWORD APIENTRY Read(LPVOID lpvBuf, DWORD dwSize) const
プロセス出力内容の読み込み
DWORD APIENTRY Wait(DWORD dwTime=INFINITE) const
プロセス終了の待機
VOID APIENTRY SetWindowInfo(DWORD dwX, DWORD dwY, DWORD dwWidth, DWORD dwHeight, WORD wShowWindow=SW_NORMAL)
起動するプロセスのウィンドウ位置を設定
DWORD APIENTRY GetExitCode() const
プロセス終了時の終了コード取得