[PATCH 2/4] dinput8/tests: Move dinput overlapped format tests.

Arkadiusz Hiler ahiler at codeweavers.com
Fri Jul 23 10:37:04 CDT 2021


Signed-off-by: Arkadiusz Hiler <ahiler at codeweavers.com>
---
 dlls/dinput/tests/device.c  | 122 --------------------------------
 dlls/dinput8/tests/device.c | 136 ++++++++++++++++++++++++++++++++++++
 2 files changed, 136 insertions(+), 122 deletions(-)

diff --git a/dlls/dinput/tests/device.c b/dlls/dinput/tests/device.c
index 6307957b6e2..485acca4f61 100644
--- a/dlls/dinput/tests/device.c
+++ b/dlls/dinput/tests/device.c
@@ -292,126 +292,6 @@ static BOOL CALLBACK enum_devices(const DIDEVICEINSTANCEA *lpddi, void *pvRef)
     return DIENUM_CONTINUE;
 }
 
-struct overlapped_state
-{
-        BYTE  keys[4];
-        DWORD extra_element;
-};
-
-static const DIOBJECTDATAFORMAT obj_overlapped_slider_format[] = {
-    { &GUID_Key,    0, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_A),0},
-    { &GUID_Key,    1, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_S),0},
-    { &GUID_Key,    2, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_D),0},
-    { &GUID_Key,    3, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_F),0},
-    { &GUID_Slider, 0, DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,DIDOI_ASPECTPOSITION},
-};
-
-static const DIDATAFORMAT overlapped_slider_format = {
-    sizeof(DIDATAFORMAT),
-    sizeof(DIOBJECTDATAFORMAT),
-    DIDF_ABSAXIS,
-    sizeof(struct overlapped_state),
-    ARRAY_SIZE(obj_overlapped_slider_format),
-    (LPDIOBJECTDATAFORMAT)obj_overlapped_slider_format
-};
-
-static const DIOBJECTDATAFORMAT obj_overlapped_pov_format[] = {
-    { &GUID_Key,    0, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_A),0},
-    { &GUID_Key,    1, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_S),0},
-    { &GUID_Key,    2, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_D),0},
-    { &GUID_Key,    3, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_F),0},
-    { &GUID_POV,    0, DIDFT_OPTIONAL|DIDFT_POV|DIDFT_ANYINSTANCE,0},
-};
-
-static const DIDATAFORMAT overlapped_pov_format = {
-    sizeof(DIDATAFORMAT),
-    sizeof(DIOBJECTDATAFORMAT),
-    DIDF_ABSAXIS,
-    sizeof(struct overlapped_state),
-    ARRAY_SIZE(obj_overlapped_pov_format),
-    (LPDIOBJECTDATAFORMAT)obj_overlapped_pov_format
-};
-
-static void pump_messages(void)
-{
-    MSG msg;
-
-    while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
-    {
-        TranslateMessage(&msg);
-        DispatchMessageA(&msg);
-    }
-}
-
-void overlapped_format_tests(IDirectInputA *pDI, HWND hwnd)
-{
-    HRESULT hr;
-    struct overlapped_state state;
-    IDirectInputDeviceA *keyboard = NULL;
-
-    hr = IDirectInput_CreateDevice(pDI, &GUID_SysKeyboard, &keyboard, NULL);
-    ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %08x\n", hr);
-
-    /* test overlapped slider - default value 0 */
-    hr = IDirectInputDevice_SetDataFormat(keyboard, &overlapped_slider_format);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_SetDataFormat() failed: %08x\n", hr);
-    hr = IDirectInputDevice_Acquire(keyboard);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_Acquire() failed: %08x\n", hr);
-
-    SetFocus(hwnd);
-    pump_messages();
-
-    /* press D */
-    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE, 0);
-    pump_messages();
-
-    memset(&state, 0xFF, sizeof(state));
-    hr = IDirectInputDevice_GetDeviceState(keyboard, sizeof(state), &state);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState() failed: %08x\n", hr);
-
-    ok(state.keys[0] == 0x00, "key A should be still up\n");
-    ok(state.keys[1] == 0x00, "key S should be still up\n");
-    ok(state.keys[2] == 0x80, "keydown for D did not register\n");
-    ok(state.keys[3] == 0x00, "key F should be still up\n");
-    ok(state.extra_element == 0, "State struct was not memset to zero\n");
-
-    /* release D */
-    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE|KEYEVENTF_KEYUP, 0);
-    pump_messages();
-
-    hr = IDirectInputDevice_Unacquire(keyboard);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_Unacquire() failed: %08x\n", hr);
-
-    /* test overlapped pov - default value - 0xFFFFFFFF */
-    hr = IDirectInputDevice_SetDataFormat(keyboard, &overlapped_pov_format);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_SetDataFormat() failed: %08x\n", hr);
-    hr = IDirectInputDevice_Acquire(keyboard);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_Acquire() failed: %08x\n", hr);
-
-    SetFocus(hwnd);
-    pump_messages();
-
-    /* press D */
-    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE, 0);
-    pump_messages();
-
-    memset(&state, 0xFF, sizeof(state));
-    hr = IDirectInputDevice_GetDeviceState(keyboard, sizeof(state), &state);
-    ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState() failed: %08x\n", hr);
-
-    ok(state.keys[0] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
-    ok(state.keys[1] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
-    ok(state.keys[2] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
-    ok(state.keys[3] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
-    ok(state.extra_element == 0, "State struct was not memset to zero\n");
-
-    /* release D */
-    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE|KEYEVENTF_KEYUP, 0);
-    pump_messages();
-
-    if (keyboard) IUnknown_Release(keyboard);
-}
-
 static void device_tests(void)
 {
     HRESULT hr;
@@ -462,8 +342,6 @@ static void device_tests(void)
             if (device) IUnknown_Release(device);
         }
 
-        overlapped_format_tests(pDI, hwnd);
-
         DestroyWindow(hwnd);
     }
     if (obj) IUnknown_Release(obj);
diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c
index 17deed193dd..4a6fc21ecec 100644
--- a/dlls/dinput8/tests/device.c
+++ b/dlls/dinput8/tests/device.c
@@ -1011,6 +1011,141 @@ static void test_appdata_property(void)
     IDirectInput_Release(pDI);
 }
 
+struct overlapped_state
+{
+        BYTE  keys[4];
+        DWORD extra_element;
+};
+
+static const DIOBJECTDATAFORMAT obj_overlapped_slider_format[] = {
+    { &GUID_Key,    0, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_A),0},
+    { &GUID_Key,    1, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_S),0},
+    { &GUID_Key,    2, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_D),0},
+    { &GUID_Key,    3, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_F),0},
+    { &GUID_Slider, 0, DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,DIDOI_ASPECTPOSITION},
+};
+
+static const DIDATAFORMAT overlapped_slider_format = {
+    sizeof(DIDATAFORMAT),
+    sizeof(DIOBJECTDATAFORMAT),
+    DIDF_ABSAXIS,
+    sizeof(struct overlapped_state),
+    ARRAY_SIZE(obj_overlapped_slider_format),
+    (LPDIOBJECTDATAFORMAT)obj_overlapped_slider_format
+};
+
+static const DIOBJECTDATAFORMAT obj_overlapped_pov_format[] = {
+    { &GUID_Key,    0, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_A),0},
+    { &GUID_Key,    1, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_S),0},
+    { &GUID_Key,    2, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_D),0},
+    { &GUID_Key,    3, DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(DIK_F),0},
+    { &GUID_POV,    0, DIDFT_OPTIONAL|DIDFT_POV|DIDFT_ANYINSTANCE,0},
+};
+
+static const DIDATAFORMAT overlapped_pov_format = {
+    sizeof(DIDATAFORMAT),
+    sizeof(DIOBJECTDATAFORMAT),
+    DIDF_ABSAXIS,
+    sizeof(struct overlapped_state),
+    ARRAY_SIZE(obj_overlapped_pov_format),
+    (LPDIOBJECTDATAFORMAT)obj_overlapped_pov_format
+};
+
+void test_overlapped_format(void)
+{
+    HRESULT hr;
+    HWND hwnd;
+    IDirectInput8A *di = NULL;
+    IDirectInputDevice8A *di_keyboard;
+    struct overlapped_state state;
+
+    hr = CoCreateInstance(&CLSID_DirectInput8, 0, CLSCTX_INPROC_SERVER, &IID_IDirectInput8A, (LPVOID*)&di);
+    if (hr == DIERR_OLDDIRECTINPUTVERSION ||
+        hr == DIERR_BETADIRECTINPUTVERSION ||
+        hr == REGDB_E_CLASSNOTREG)
+    {
+        win_skip("test_overlapped_format requires dinput8\n");
+        return;
+    }
+    ok(SUCCEEDED(hr), "DirectInput8Create failed: %08x\n", hr);
+
+    hr = IDirectInput8_Initialize(di, GetModuleHandleA(NULL), DIRECTINPUT_VERSION);
+    if (hr == DIERR_OLDDIRECTINPUTVERSION || hr == DIERR_BETADIRECTINPUTVERSION)
+    {
+        win_skip("test_overlapped_format requires dinput8\n");
+        return;
+    }
+    ok(SUCCEEDED(hr), "IDirectInput8_Initialize failed: %08x\n", hr);
+
+    hwnd = CreateWindowExA(WS_EX_TOPMOST, "static", "dinput", WS_POPUP | WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, NULL, NULL);
+    ok(hwnd != NULL, "CreateWindowExA failed\n");
+
+    hr = IDirectInput8_CreateDevice(di, &GUID_SysKeyboard, &di_keyboard, NULL);
+    ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %08x\n", hr);
+
+    /* test overlapped slider - default value 0 */
+    hr = IDirectInputDevice8_SetDataFormat(di_keyboard, &overlapped_slider_format);
+    ok(SUCCEEDED(hr), "IDirectInputDevice8_SetDataFormat() failed: %08x\n", hr);
+    hr = IDirectInputDevice8_Acquire(di_keyboard);
+    ok(SUCCEEDED(hr), "IDirectInputDevice8_Acquire() failed: %08x\n", hr);
+
+    SetFocus(hwnd);
+    flush_events();
+
+    /* press D */
+    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE, 0);
+    flush_events();
+
+    memset(&state, 0xFF, sizeof(state));
+    hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(state), &state);
+    ok(SUCCEEDED(hr), "IDirectInputDevice8_GetDeviceState() failed: %08x\n", hr);
+
+    ok(state.keys[0] == 0x00, "key A should be still up\n");
+    ok(state.keys[1] == 0x00, "key S should be still up\n");
+    ok(state.keys[2] == 0x80, "keydown for D did not register\n");
+    ok(state.keys[3] == 0x00, "key F should be still up\n");
+    ok(state.extra_element == 0, "State struct was not memset to zero\n");
+
+    /* release D */
+    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE|KEYEVENTF_KEYUP, 0);
+    flush_events();
+
+    hr = IDirectInputDevice8_Unacquire(di_keyboard);
+    ok(SUCCEEDED(hr), "IDirectInputDevice8_Unacquire() failed: %08x\n", hr);
+
+    /* test overlapped pov - default value - 0xFFFFFFFF */
+    hr = IDirectInputDevice8_SetDataFormat(di_keyboard, &overlapped_pov_format);
+    ok(SUCCEEDED(hr), "IDirectInputDevice8_SetDataFormat() failed: %08x\n", hr);
+    hr = IDirectInputDevice8_Acquire(di_keyboard);
+    ok(SUCCEEDED(hr), "IDirectInputDevice8_Acquire() failed: %08x\n", hr);
+
+    SetFocus(hwnd);
+    flush_events();
+
+    /* press D */
+    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE, 0);
+    flush_events();
+
+    memset(&state, 0xFF, sizeof(state));
+    hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(state), &state);
+    ok(SUCCEEDED(hr), "IDirectInputDevice_8GetDeviceState() failed: %08x\n", hr);
+
+    ok(state.keys[0] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
+    ok(state.keys[1] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
+    ok(state.keys[2] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
+    ok(state.keys[3] == 0xFF, "key state should have been overwritten by the overlapped POV\n");
+    ok(state.extra_element == 0, "State struct was not memset to zero\n");
+
+    /* release D */
+    keybd_event(0, DIK_D, KEYEVENTF_SCANCODE|KEYEVENTF_KEYUP, 0);
+    flush_events();
+
+    IDirectInputDevice8_Release(di_keyboard);
+    IDirectInput8_Release(di);
+
+    DestroyWindow(hwnd);
+}
+
 START_TEST(device)
 {
     CoInitialize(NULL);
@@ -1020,6 +1155,7 @@ START_TEST(device)
     test_mouse_keyboard();
     test_keyboard_events();
     test_appdata_property();
+    test_overlapped_format();
 
     CoUninitialize();
 }
-- 
2.32.0




More information about the wine-devel mailing list