[DINPUT_WINETEST] Sync with Wine Staging 1.9.4. CORE-10912
[reactos.git] / rostests / winetests / dinput / keyboard.c
index 650961e..18e1f07 100644 (file)
 //#include "wingdi.h"
 #include <dinput.h>
 
-static void acquire_tests(LPDIRECTINPUT pDI, HWND hwnd)
+static void acquire_tests(IDirectInputA *pDI, HWND hwnd)
 {
     HRESULT hr;
-    LPDIRECTINPUTDEVICE pKeyboard;
+    IDirectInputDeviceA *pKeyboard;
     BYTE kbd_state[256];
     LONG custom_state[6];
     int i;
@@ -95,6 +95,27 @@ static void acquire_tests(LPDIRECTINPUT pDI, HWND hwnd)
     for (i = 0; i < sizeof(custom_state) / sizeof(custom_state[0]); i++)
         ok(custom_state[i] == 0, "Should be zeroed, got 0x%08x\n", custom_state[i]);
 
+    /* simulate some keyboard input */
+    SetFocus(hwnd);
+    keybd_event('Q', 0, 0, 0);
+    hr = IDirectInputDevice_GetDeviceState(pKeyboard, sizeof(custom_state), custom_state);
+    ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState() failed: %08x\n", hr);
+    if (!custom_state[0])
+        win_skip("Keyboard event not processed, skipping test\n");
+    else
+    {
+        /* unacquiring should reset the device state */
+        hr = IDirectInputDevice_Unacquire(pKeyboard);
+        ok(SUCCEEDED(hr), "IDirectInputDevice_Unacquire() failed: %08x\n", hr);
+        hr = IDirectInputDevice_Acquire(pKeyboard);
+        ok(SUCCEEDED(hr), "IDirectInputDevice_Acquire() failed: %08x\n", hr);
+        hr = IDirectInputDevice_GetDeviceState(pKeyboard, sizeof(custom_state), custom_state);
+        ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState failed: %08x\n", hr);
+        for (i = 0; i < sizeof(custom_state) / sizeof(custom_state[0]); i++)
+            ok(custom_state[i] == 0, "Should be zeroed, got 0x%08x\n", custom_state[i]);
+    }
+    keybd_event('Q', 0, KEYEVENTF_KEYUP, 0);
+
     if (pKeyboard) IUnknown_Release(pKeyboard);
 }
 
@@ -104,6 +125,12 @@ static const HRESULT SetCoop_null_window[16] =  {
     E_INVALIDARG, E_HANDLE,     S_OK,         E_INVALIDARG,
     E_INVALIDARG, E_INVALIDARG, E_INVALIDARG, E_INVALIDARG};
 
+static const HRESULT SetCoop_invalid_window[16] =  {
+    E_INVALIDARG, E_INVALIDARG, E_INVALIDARG, E_INVALIDARG,
+    E_INVALIDARG, E_HANDLE,     E_HANDLE,     E_INVALIDARG,
+    E_INVALIDARG, E_HANDLE,     E_HANDLE,     E_INVALIDARG,
+    E_INVALIDARG, E_INVALIDARG, E_INVALIDARG, E_INVALIDARG};
+
 static const HRESULT SetCoop_real_window[16] =  {
     E_INVALIDARG, E_INVALIDARG, E_INVALIDARG, E_INVALIDARG,
     E_INVALIDARG, S_OK,         S_OK,         E_INVALIDARG,
@@ -116,10 +143,10 @@ static const HRESULT SetCoop_child_window[16] =  {
     E_INVALIDARG, E_HANDLE,     E_HANDLE,     E_INVALIDARG,
     E_INVALIDARG, E_INVALIDARG, E_INVALIDARG, E_INVALIDARG};
 
-static void test_set_coop(LPDIRECTINPUT pDI, HWND hwnd)
+static void test_set_coop(IDirectInputA *pDI, HWND hwnd)
 {
     HRESULT hr;
-    LPDIRECTINPUTDEVICE pKeyboard = NULL;
+    IDirectInputDeviceA *pKeyboard = NULL;
     int i;
     HWND child;
 
@@ -133,13 +160,18 @@ static void test_set_coop(LPDIRECTINPUT pDI, HWND hwnd)
         ok(hr == SetCoop_null_window[i], "SetCooperativeLevel(NULL, %d): %08x\n", i, hr);
     }
     for (i=0; i<16; i++)
+    {
+        hr = IDirectInputDevice_SetCooperativeLevel(pKeyboard, (HWND)0x400000, i);
+        ok(hr == SetCoop_invalid_window[i], "SetCooperativeLevel(invalid, %d): %08x\n", i, hr);
+    }
+    for (i=0; i<16; i++)
     {
         hr = IDirectInputDevice_SetCooperativeLevel(pKeyboard, hwnd, i);
         ok(hr == SetCoop_real_window[i], "SetCooperativeLevel(hwnd, %d): %08x\n", i, hr);
     }
 
-    child = CreateWindow("static", "Title", WS_CHILD | WS_VISIBLE,
-                         10, 10, 50, 50, hwnd, NULL, NULL, NULL);
+    child = CreateWindowA("static", "Title", WS_CHILD | WS_VISIBLE, 10, 10, 50, 50, hwnd, NULL,
+                          NULL, NULL);
     ok(child != NULL, "err: %d\n", GetLastError());
 
     for (i=0; i<16; i++)
@@ -152,10 +184,10 @@ static void test_set_coop(LPDIRECTINPUT pDI, HWND hwnd)
     if (pKeyboard) IUnknown_Release(pKeyboard);
 }
 
-static void test_get_prop(LPDIRECTINPUT pDI, HWND hwnd)
+static void test_get_prop(IDirectInputA *pDI, HWND hwnd)
 {
     HRESULT hr;
-    LPDIRECTINPUTDEVICE pKeyboard = NULL;
+    IDirectInputDeviceA *pKeyboard = NULL;
     DIPROPRANGE diprg;
 
     hr = IDirectInput_CreateDevice(pDI, &GUID_SysKeyboard, &pKeyboard, NULL);
@@ -174,10 +206,10 @@ static void test_get_prop(LPDIRECTINPUT pDI, HWND hwnd)
     if (pKeyboard) IUnknown_Release(pKeyboard);
 }
 
-static void test_capabilities(LPDIRECTINPUT pDI, HWND hwnd)
+static void test_capabilities(IDirectInputA *pDI, HWND hwnd)
 {
     HRESULT hr;
-    LPDIRECTINPUTDEVICE pKeyboard = NULL;
+    IDirectInputDeviceA *pKeyboard = NULL;
     DIDEVCAPS caps;
 
     hr = IDirectInput_CreateDevice(pDI, &GUID_SysKeyboard, &pKeyboard, NULL);
@@ -200,22 +232,22 @@ static void test_capabilities(LPDIRECTINPUT pDI, HWND hwnd)
 static void keyboard_tests(DWORD version)
 {
     HRESULT hr;
-    LPDIRECTINPUT pDI = NULL;
-    HINSTANCE hInstance = GetModuleHandle(NULL);
+    IDirectInputA *pDI = NULL;
+    HINSTANCE hInstance = GetModuleHandleW(NULL);
     HWND hwnd;
     ULONG ref = 0;
 
-    hr = DirectInputCreate(hInstance, version, &pDI, NULL);
+    hr = DirectInputCreateA(hInstance, version, &pDI, NULL);
     if (hr == DIERR_OLDDIRECTINPUTVERSION)
     {
         skip("Tests require a newer dinput version\n");
         return;
     }
-    ok(SUCCEEDED(hr), "DirectInputCreate() failed: %08x\n", hr);
+    ok(SUCCEEDED(hr), "DirectInputCreateA() failed: %08x\n", hr);
     if (FAILED(hr)) return;
 
-    hwnd = CreateWindow("static", "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
-                        10, 10, 200, 200, NULL, NULL, NULL, NULL);
+    hwnd = CreateWindowA("static", "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 10, 10, 200, 200,
+                         NULL, NULL, NULL, NULL);
     ok(hwnd != NULL, "err: %d\n", GetLastError());
 
     if (hwnd)