[APOTESTS]
[reactos.git] / rostests / apitests / win32nt / ntuser / NtUserCallOneParam.c
diff --git a/rostests/apitests/win32nt/ntuser/NtUserCallOneParam.c b/rostests/apitests/win32nt/ntuser/NtUserCallOneParam.c
new file mode 100644 (file)
index 0000000..abddf87
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * PURPOSE:         Test for NtUserCallOneParam
+ * PROGRAMMERS:
+ */
+
+#include <win32nt.h>
+
+
+
+void
+Test_OneParamRoutine_BeginDeferWindowPos(void) /* 0x1e */
+{
+       HDWP hWinPosInfo;
+
+       hWinPosInfo = (HDWP)NtUserCallOneParam(5, 0x1e);
+       TEST(hWinPosInfo != 0);
+       TEST(EndDeferWindowPos(hWinPosInfo) != 0);
+
+}
+
+void
+Test_OneParamRoutine_WindowFromDC(void) /* 0x1f */
+{
+       HDC hDC = GetDC(NULL);
+       HWND hWnd;
+
+       hWnd = (HWND)NtUserCallOneParam((DWORD)hDC, 0x1f);
+       TEST(hWnd != 0);
+       TEST(IsWindow(hWnd));
+       TEST(hWnd == GetDesktopWindow());
+
+}
+
+void
+Test_OneParamRoutine_CreateEmptyCurObject(void) /* XP/2k3 : 0x21, vista 0x25 */
+{
+       HICON hIcon ;
+
+       /* Test 0 */
+       hIcon = (HICON) NtUserCallOneParam(0, _ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT);
+       TEST(hIcon != NULL);
+
+       TEST(NtUserDestroyCursor(hIcon, 0) == TRUE);
+
+       /* Test Garbage */
+       hIcon = (HICON) NtUserCallOneParam(0xdeadbeef, _ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT);
+       TEST(hIcon != NULL);
+
+       TEST(NtUserDestroyCursor(hIcon, 0xbaadf00d) == TRUE);
+
+}
+
+void
+Test_OneParamRoutine_MapDesktopObject(void) /* 0x30 */
+{
+       DWORD pObject;
+       HWND hWnd;
+       HMENU hMenu;
+
+       hWnd = GetDesktopWindow();
+       pObject = NtUserCallOneParam((DWORD)hWnd, _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT);
+       TEST(pObject > 0);
+       TEST(pObject < 0x80000000);
+
+       hMenu = CreateMenu();
+       pObject = NtUserCallOneParam((DWORD)hMenu, _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT);
+       DestroyMenu(hMenu);
+       TEST(pObject > 0);
+       TEST(pObject < 0x80000000);
+
+}
+
+void
+Test_OneParamRoutine_SwapMouseButtons(void) /* 0x42 */
+{
+       BOOL bInverse;
+
+       NtUserCallOneParam(TRUE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON);
+       bInverse = (BOOL)NtUserCallOneParam(FALSE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON);
+       TEST(bInverse == TRUE);
+       bInverse = (BOOL)NtUserCallOneParam(FALSE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON);
+       TEST(bInverse == FALSE);
+
+       // TODO: test other values
+}
+
+START_TEST(NtUserCallOneParam)
+{
+       Test_OneParamRoutine_BeginDeferWindowPos(); /* 0x1e */
+       Test_OneParamRoutine_WindowFromDC(); /* 0x1f */
+       Test_OneParamRoutine_CreateEmptyCurObject(); /* XP/2k3 : 0x21, vista 0x25 */
+       Test_OneParamRoutine_MapDesktopObject(); /* 0x30 */
+       Test_OneParamRoutine_SwapMouseButtons(); /* 0x42 */
+}