diff options
Diffstat (limited to 'src/test/examples/TestEngine/TestEngine.cpp')
| -rw-r--r-- | src/test/examples/TestEngine/TestEngine.cpp | 83 |
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 | |||
| 16 | LExit: | 19 | LExit: |
| 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 | ||
| 79 | HRESULT 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 | |||
| 98 | LExit: | ||
| 99 | return hr; | ||
| 100 | } | ||
| 101 | |||
| 76 | HRESULT TestEngine::SendShutdownEvent( | 102 | HRESULT 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 | ||
| 127 | HRESULT 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 | |||
| 101 | void TestEngine::UnloadBA() | 142 | void 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 | ||
| 126 | HRESULT TestEngine::BAEngineLog( | 167 | HRESULT 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 | |||
| 175 | HRESULT 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 | |||
| 187 | LExit: | ||
| 188 | return hr; | ||
| 133 | } | 189 | } |
| 134 | 190 | ||
| 135 | HRESULT WINAPI TestEngine::EngineProc( | 191 | HRESULT 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 | ||
| 222 | HRESULT 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 | |||
| 164 | TestEngine::TestEngine() | 238 | TestEngine::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 | ||
| 170 | TestEngine::~TestEngine() | 245 | TestEngine::~TestEngine() |
| 171 | { | 246 | { |
| 172 | ReleaseMem(m_pCreateResults); | 247 | ReleaseMem(m_pCreateResults); |
| 173 | } \ No newline at end of file | 248 | } |
