Signed-off-by: Arkadiusz Hiler ahiler@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(); }