summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/exception_handling/RaiseException/test2/test2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/tests/palsuite/exception_handling/RaiseException/test2/test2.cpp')
-rw-r--r--src/pal/tests/palsuite/exception_handling/RaiseException/test2/test2.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/exception_handling/RaiseException/test2/test2.cpp b/src/pal/tests/palsuite/exception_handling/RaiseException/test2/test2.cpp
new file mode 100644
index 0000000000..f8db573ac0
--- /dev/null
+++ b/src/pal/tests/palsuite/exception_handling/RaiseException/test2/test2.cpp
@@ -0,0 +1,224 @@
+// 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: test2.c (exception_handling\raiseexception\test2)
+**
+** Purpose: Tests that the correct arguments are passed
+** to the filter by RaiseException and tests that
+** the number of arguments never exceeds
+** EXCEPTION_MAXIMUM_PARAMETERS, even though we
+** pass a greater number of arguments
+**
+**
+**============================================================*/
+
+
+#include <palsuite.h>
+
+BOOL bFilter;
+BOOL bTry;
+BOOL bExcept;
+
+ULONG_PTR lpArguments_test1[EXCEPTION_MAXIMUM_PARAMETERS];
+DWORD nArguments_test1 = EXCEPTION_MAXIMUM_PARAMETERS;
+
+ULONG_PTR lpArguments_test2[EXCEPTION_MAXIMUM_PARAMETERS+1];
+DWORD nArguments_test2 = EXCEPTION_MAXIMUM_PARAMETERS+1;
+
+
+/**
+**
+** Filter function that checks for the parameters
+**
+**/
+LONG Filter_test1(EXCEPTION_POINTERS* ep, VOID *unused)
+{
+ int i;
+
+ /* let the main know we've hit the filter function */
+ bFilter = TRUE;
+
+ if (!bTry)
+ {
+ Fail("PAL_EXCEPT_FILTER_EX: ERROR -> Something weird is going on."
+ " The filter was hit without PAL_TRY being hit.\n");
+ }
+
+
+ /* was the correct number of arguments passed */
+ if (ep->ExceptionRecord->NumberParameters != (DWORD) nArguments_test1)
+ {
+ Fail("RaiseException: ERROR -> Number of arguments passed to filter"
+ " was %d when it should have been %d",
+ ep->ExceptionRecord->NumberParameters,
+ nArguments_test1);
+
+ }
+
+ /* were the correct arguments passed */
+ for( i=0; ((DWORD)i)<nArguments_test1; i++ )
+ {
+ if( ep->ExceptionRecord->ExceptionInformation[i]
+ != lpArguments_test1[i])
+ {
+ Fail("RaiseException: ERROR -> Argument %d passed to filter"
+ " was %d when it should have been %d",
+ i,
+ ep->ExceptionRecord->ExceptionInformation[i],
+ lpArguments_test1[i]);
+ }
+ }
+
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+
+/**
+**
+** Filter function that checks for the maximum parameters
+**
+**/
+LONG Filter_test2(EXCEPTION_POINTERS* ep, VOID* unused)
+{
+ /* let the main know we've hit the filter function */
+ bFilter = TRUE;
+
+ if (ep->ExceptionRecord->NumberParameters > EXCEPTION_MAXIMUM_PARAMETERS)
+ {
+ Fail("RaiseException: ERROR -> Number of arguments passed to filter"
+ " was %d which is greater than the maximum allowed of %d\n",
+ ep->ExceptionRecord->NumberParameters,
+ EXCEPTION_MAXIMUM_PARAMETERS);
+ }
+
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+
+int __cdecl main(int argc, char *argv[])
+{
+ bExcept = FALSE;
+
+ if (0 != PAL_Initialize(argc, argv))
+ {
+ return FAIL;
+ }
+
+ /********************************************************
+ * Test that the correct arguments are passed
+ * to the filter by RaiseException
+ */
+ PAL_TRY(VOID*, unused, NULL)
+ {
+ bTry = TRUE; /* indicate we hit the PAL_TRY block */
+
+ /* Initialize arguments to pass to filter */
+ for(int i = 0; ((DWORD)i) < nArguments_test1; i++ )
+ {
+ lpArguments_test1[i] = i;
+ }
+
+ RaiseException(0,0,nArguments_test1,lpArguments_test1);
+
+ Fail("RaiseException: ERROR -> code was executed after the "
+ "exception was raised.\n");
+ }
+ PAL_EXCEPT_FILTER(Filter_test1)
+ {
+ if (!bTry)
+ {
+ Fail("RaiseException: ERROR -> Something weird is going on."
+ " PAL_EXCEPT_FILTER was hit without PAL_TRY being hit.\n");
+ }
+ bExcept = TRUE; /* indicate we hit the PAL_EXCEPT_FILTER_EX block */
+ }
+ PAL_ENDTRY;
+
+ if (!bTry)
+ {
+ Trace("RaiseException: ERROR -> It appears the code in the "
+ "PAL_TRY block was not executed.\n");
+ }
+
+ if (!bExcept)
+ {
+ Trace("RaiseException: ERROR -> It appears the code in the "
+ "PAL_EXCEPT_FILTER_EX block was not executed.\n");
+ }
+
+ if (!bFilter)
+ {
+ Trace("RaiseException: ERROR -> It appears the code in the"
+ " filter function was not executed.\n");
+ }
+
+ /* did we hit all the code blocks? */
+ if(!bTry || !bExcept || !bFilter)
+ {
+ Fail("");
+ }
+
+
+ /* Reinit flags */
+ bTry = bExcept = bFilter = FALSE;
+
+ /********************************************************
+ * Test that the number of arguments never
+ * exceeds EXCEPTION_MAXIMUM_PARAMETERS, even though we
+ * pass a greater number of arguments
+ */
+ PAL_TRY(VOID*, unused, NULL)
+ {
+ bTry = TRUE; /* indicate we hit the PAL_TRY block */
+
+ /* Initialize arguments to pass to filter */
+ for(int i = 0; ((DWORD)i) < nArguments_test2; i++ )
+ {
+ lpArguments_test2[i] = i;
+ }
+
+ RaiseException(0,0,nArguments_test2,lpArguments_test2);
+
+ Fail("RaiseException: ERROR -> code was executed after the "
+ "exception was raised.\n");
+ }
+ PAL_EXCEPT_FILTER(Filter_test2)
+ {
+ if (!bTry)
+ {
+ Fail("RaiseException: ERROR -> Something weird is going on."
+ " PAL_EXCEPT_FILTER was hit without PAL_TRY being hit.\n");
+ }
+ bExcept = TRUE; /* indicate we hit the PAL_EXCEPT_FILTER_EX block */
+ }
+ PAL_ENDTRY;
+
+ if (!bTry)
+ {
+ Trace("RaiseException: ERROR -> It appears the code in the "
+ "PAL_TRY block was not executed.\n");
+ }
+
+ if (!bExcept)
+ {
+ Trace("RaiseException: ERROR -> It appears the code in the "
+ "PAL_EXCEPT_FILTER_EX block was not executed.\n");
+ }
+
+ if (!bFilter)
+ {
+ Trace("RaiseException: ERROR -> It appears the code in the"
+ " filter function was not executed.\n");
+ }
+
+ /* did we hit all the code blocks? */
+ if(!bTry || !bExcept || !bFilter)
+ {
+ Fail("");
+ }
+
+ PAL_Terminate();
+ return PASS;
+
+}