summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/test1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/test1.cpp')
-rw-r--r--src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/test1.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/test1.cpp b/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/test1.cpp
new file mode 100644
index 0000000000..080c6ac53e
--- /dev/null
+++ b/src/pal/tests/palsuite/debug_api/OutputDebugStringA/test1/test1.cpp
@@ -0,0 +1,94 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+/*=============================================================
+**
+** Source: test1.c
+**
+** Purpose: Debugs the helper application. Checks that certain events, in
+** particular the OUTPUT_DEBUG_STRING_EVENT, is generated correctly
+** and gives the correct values.
+**
+**
+**============================================================*/
+
+#include <palsuite.h>
+
+const int DELAY_MS = 2000;
+
+struct OutputCheck
+{
+ DWORD ExpectedEventCode;
+ DWORD ExpectedUnicode;
+ char *ExpectedStr;
+};
+
+int __cdecl main(int argc, char *argv[])
+{
+
+ PROCESS_INFORMATION pi;
+ STARTUPINFO si;
+
+ if(0 != (PAL_Initialize(argc, argv)))
+ {
+ return FAIL;
+ }
+
+ ZeroMemory( &si, sizeof(si) );
+ si.cb = sizeof(si);
+ ZeroMemory( &pi, sizeof(pi) );
+
+ /* Create a new process. This is the process to be Debugged */
+ if(!CreateProcess( NULL, "helper", NULL, NULL,
+ FALSE, 0, NULL, NULL, &si, &pi))
+ {
+ Fail("ERROR: CreateProcess failed to load executable 'helper'. "
+ "GetLastError() returned %d.\n",GetLastError());
+ }
+
+ /* This is the main loop. It exits when the process which is being
+ debugged is finished executing.
+ */
+
+ while(1)
+ {
+ DWORD dwRet = 0;
+ dwRet = WaitForSingleObject(pi.hProcess,
+ DELAY_MS /* Wait for 2 seconds max*/
+ );
+
+ if (dwRet != WAIT_OBJECT_0)
+ {
+ Trace("WaitForSingleObjectTest:WaitForSingleObject "
+ "failed (%x) after waiting %d seconds for the helper\n",
+ GetLastError(), DELAY_MS / 1000);
+ }
+ else
+ {
+ DWORD dwExitCode;
+
+ /* check the exit code from the process */
+ if( ! GetExitCodeProcess( pi.hProcess, &dwExitCode ) )
+ {
+ DWORD dwError;
+
+ dwError = GetLastError();
+ CloseHandle ( pi.hProcess );
+ CloseHandle ( pi.hThread );
+ Fail( "GetExitCodeProcess call failed with error code %d\n",
+ dwError );
+ }
+
+ if(dwExitCode != STILL_ACTIVE) {
+ CloseHandle(pi.hThread);
+ CloseHandle(pi.hProcess);
+ break;
+ }
+ Trace("still executing %d..\n", dwExitCode);
+ }
+ }
+
+ PAL_Terminate();
+ return PASS;
+}