[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