aboutsummaryrefslogtreecommitdiff
path: root/src/test/examples/TestEngine/TestEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/examples/TestEngine/TestEngine.cpp')
-rw-r--r--src/test/examples/TestEngine/TestEngine.cpp83
1 files changed, 79 insertions, 4 deletions
diff --git a/src/test/examples/TestEngine/TestEngine.cpp b/src/test/examples/TestEngine/TestEngine.cpp
index f0811e0a..7b7dafce 100644
--- a/src/test/examples/TestEngine/TestEngine.cpp
+++ b/src/test/examples/TestEngine/TestEngine.cpp
@@ -7,12 +7,15 @@ HRESULT TestEngine::Initialize(
7 ) 7 )
8{ 8{
9 HRESULT hr = S_OK; 9 HRESULT hr = S_OK;
10 MSG msg = { };
10 11
11 LogInitialize(::GetModuleHandleW(NULL)); 12 LogInitialize(::GetModuleHandleW(NULL));
12 13
13 hr = LogOpen(NULL, PathFile(wzBundleFilePath), NULL, L"txt", FALSE, FALSE, NULL); 14 hr = LogOpen(NULL, PathFile(wzBundleFilePath), NULL, L"txt", FALSE, FALSE, NULL);
14 ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to open log."); 15 ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to open log.");
15 16
17 ::PeekMessageW(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
18
16LExit: 19LExit:
17 return hr; 20 return hr;
18} 21}
@@ -73,6 +76,29 @@ HRESULT TestEngine::Log(
73 return ConsoleWriteLine(CONSOLE_COLOR_NORMAL, "%ls", wzMessage); 76 return ConsoleWriteLine(CONSOLE_COLOR_NORMAL, "%ls", wzMessage);
74} 77}
75 78
79HRESULT TestEngine::RunApplication()
80{
81 HRESULT hr = S_OK;
82 MSG msg = { };
83 BOOL fRet = FALSE;
84
85 // Enter the message pump.
86 while (0 != (fRet = ::GetMessageW(&msg, NULL, 0, 0)))
87 {
88 if (-1 == fRet)
89 {
90 ConsoleExitOnFailure(hr = E_UNEXPECTED, CONSOLE_COLOR_RED, "Unexpected return value from message pump.");
91 }
92 else
93 {
94 ProcessBAMessage(&msg);
95 }
96 }
97
98LExit:
99 return hr;
100}
101
76HRESULT TestEngine::SendShutdownEvent( 102HRESULT TestEngine::SendShutdownEvent(
77 __in BOOTSTRAPPER_SHUTDOWN_ACTION defaultAction 103 __in BOOTSTRAPPER_SHUTDOWN_ACTION defaultAction
78 ) 104 )
@@ -98,6 +124,21 @@ HRESULT TestEngine::SendStartupEvent()
98 return hr; 124 return hr;
99} 125}
100 126
127HRESULT TestEngine::SimulateQuit(
128 __in DWORD dwExitCode
129 )
130{
131 BAENGINE_QUIT_ARGS args = { };
132 BAENGINE_QUIT_RESULTS results = { };
133
134 args.cbSize = sizeof(BAENGINE_QUIT_ARGS);
135 args.dwExitCode = dwExitCode;
136
137 results.cbSize = sizeof(BAENGINE_QUIT_RESULTS);
138
139 return BAEngineQuit(&args, &results);
140}
141
101void TestEngine::UnloadBA() 142void TestEngine::UnloadBA()
102{ 143{
103 PFN_BOOTSTRAPPER_APPLICATION_DESTROY pfnDestroy = NULL; 144 PFN_BOOTSTRAPPER_APPLICATION_DESTROY pfnDestroy = NULL;
@@ -124,12 +165,27 @@ void TestEngine::UnloadBA()
124} 165}
125 166
126HRESULT TestEngine::BAEngineLog( 167HRESULT TestEngine::BAEngineLog(
127 __in TestEngine* pContext,
128 __in BAENGINE_LOG_ARGS* pArgs, 168 __in BAENGINE_LOG_ARGS* pArgs,
129 __in BAENGINE_LOG_RESULTS* /*pResults*/ 169 __in BAENGINE_LOG_RESULTS* /*pResults*/
130 ) 170 )
131{ 171{
132 return pContext->Log(pArgs->wzMessage); 172 return Log(pArgs->wzMessage);
173}
174
175HRESULT TestEngine::BAEngineQuit(
176 __in BAENGINE_QUIT_ARGS* pArgs,
177 __in BAENGINE_QUIT_RESULTS* /*pResults*/
178 )
179{
180 HRESULT hr = S_OK;
181
182 if (!::PostThreadMessageW(m_dwThreadId, WM_TESTENG_QUIT, static_cast<WPARAM>(pArgs->dwExitCode), 0))
183 {
184 ExitWithLastError(hr, "Failed to post shutdown message.");
185 }
186
187LExit:
188 return hr;
133} 189}
134 190
135HRESULT WINAPI TestEngine::EngineProc( 191HRESULT WINAPI TestEngine::EngineProc(
@@ -150,8 +206,10 @@ HRESULT WINAPI TestEngine::EngineProc(
150 switch (message) 206 switch (message)
151 { 207 {
152 case BOOTSTRAPPER_ENGINE_MESSAGE_LOG: 208 case BOOTSTRAPPER_ENGINE_MESSAGE_LOG:
153 hr = BAEngineLog(pContext, reinterpret_cast<BAENGINE_LOG_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_LOG_RESULTS*>(pvResults)); 209 hr = pContext->BAEngineLog(reinterpret_cast<BAENGINE_LOG_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_LOG_RESULTS*>(pvResults));
154 break; 210 break;
211 case BOOTSTRAPPER_ENGINE_MESSAGE_QUIT:
212 hr = pContext->BAEngineQuit(reinterpret_cast<BAENGINE_QUIT_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_QUIT_RESULTS*>(pvResults));
155 default: 213 default:
156 hr = E_NOTIMPL; 214 hr = E_NOTIMPL;
157 break; 215 break;
@@ -161,13 +219,30 @@ LExit:
161 return hr; 219 return hr;
162} 220}
163 221
222HRESULT TestEngine::ProcessBAMessage(
223 __in const MSG* pmsg
224 )
225{
226 HRESULT hr = S_OK;
227
228 switch (pmsg->message)
229 {
230 case WM_TESTENG_QUIT:
231 ::PostQuitMessage(static_cast<int>(pmsg->wParam)); // go bye-bye.
232 break;
233 }
234
235 return hr;
236}
237
164TestEngine::TestEngine() 238TestEngine::TestEngine()
165{ 239{
166 m_hBAModule = NULL; 240 m_hBAModule = NULL;
167 m_pCreateResults = NULL; 241 m_pCreateResults = NULL;
242 m_dwThreadId = ::GetCurrentThreadId();
168} 243}
169 244
170TestEngine::~TestEngine() 245TestEngine::~TestEngine()
171{ 246{
172 ReleaseMem(m_pCreateResults); 247 ReleaseMem(m_pCreateResults);
173} \ No newline at end of file 248}