From: Rémi Bernon rbernon@codeweavers.com
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/tests/device8.c | 82 ++++++++++++++++++++++++++------- dlls/dinput/tests/mouse.c | 90 ------------------------------------- 2 files changed, 65 insertions(+), 107 deletions(-)
diff --git a/dlls/dinput/tests/device8.c b/dlls/dinput/tests/device8.c index a5c647713f2..bf9d16cbc05 100644 --- a/dlls/dinput/tests/device8.c +++ b/dlls/dinput/tests/device8.c @@ -98,6 +98,30 @@ static void flush_events(void) } }
+static HRESULT create_dinput_device( DWORD version, const GUID *guid, IDirectInputDevice8W **device ) +{ + IDirectInputW *dinput; + HRESULT hr; + ULONG ref; + + if (version < 0x800) hr = DirectInputCreateW( instance, version, &dinput, NULL ); + else hr = DirectInput8Create( instance, version, &IID_IDirectInput8W, (void **)&dinput, NULL ); + if (FAILED(hr)) + { + win_skip( "Failed to instantiate a IDirectInput instance, hr %#lx\n", hr ); + return hr; + } + + hr = IDirectInput_CreateDevice( dinput, guid, (IDirectInputDeviceW **)device, NULL ); + ok( hr == DI_OK, "CreateDevice returned %#lx\n", hr ); + + ref = IDirectInput_Release( dinput ); + todo_wine + ok( ref == 0, "Release returned %ld\n", ref ); + + return DI_OK; +} + static HRESULT direct_input_create( DWORD version, IDirectInputA **out ) { HRESULT hr; @@ -1451,13 +1475,14 @@ static BOOL CALLBACK check_object_count( const DIDEVICEOBJECTINSTANCEW *obj, voi return DIENUM_CONTINUE; }
-static void test_mouse_info(void) +static void test_sys_mouse( DWORD version ) { - static const DIDEVCAPS expect_caps = + const DIDEVCAPS expect_caps = { .dwSize = sizeof(DIDEVCAPS), .dwFlags = DIDC_ATTACHED | DIDC_EMULATED, - .dwDevType = (DI8DEVTYPEMOUSE_UNKNOWN << 8) | DI8DEVTYPE_MOUSE, + .dwDevType = version < 0x800 ? (DIDEVTYPEMOUSE_UNKNOWN << 8) | DIDEVTYPE_MOUSE + : (DI8DEVTYPEMOUSE_UNKNOWN << 8) | DI8DEVTYPE_MOUSE, .dwAxes = 3, .dwButtons = 5, }; @@ -1466,7 +1491,8 @@ static void test_mouse_info(void) .dwSize = sizeof(DIDEVICEINSTANCEW), .guidInstance = GUID_SysMouse, .guidProduct = GUID_SysMouse, - .dwDevType = (DI8DEVTYPEMOUSE_UNKNOWN << 8) | DI8DEVTYPE_MOUSE, + .dwDevType = version < 0x800 ? (DIDEVTYPEMOUSE_UNKNOWN << 8) | DIDEVTYPE_MOUSE + : (DI8DEVTYPEMOUSE_UNKNOWN << 8) | DI8DEVTYPE_MOUSE, .tszInstanceName = L"Mouse", .tszProductName = L"Mouse", .guidFFDriver = GUID_NULL, @@ -1579,21 +1605,19 @@ static void test_mouse_info(void) }; DIDEVICEOBJECTINSTANCEW objinst = {0}; DIDEVICEINSTANCEW devinst = {0}; + BOOL old_localized = localized; IDirectInputDevice8W *device; DIDEVCAPS caps = {0}; - IDirectInput8W *di; ULONG res, ref; HRESULT hr; GUID guid;
- localized = LOWORD( GetKeyboardLayout( 0 ) ) != 0x0409; + if (FAILED(create_dinput_device( version, &GUID_SysMouse, &device ))) return;
- hr = DirectInput8Create( instance, DIRECTINPUT_VERSION, &IID_IDirectInput8W, (void **)&di, NULL ); - ok( hr == DI_OK, "DirectInput8Create returned %#lx\n", hr ); - hr = IDirectInput8_CreateDevice( di, &GUID_SysMouse, &device, NULL ); - ok( hr == DI_OK, "CreateDevice returned %#lx\n", hr ); + localized = LOWORD( GetKeyboardLayout( 0 ) ) != 0x0409; + winetest_push_context( "%#lx", version );
- hr = IDirectInputDevice8_Initialize( device, instance, DIRECTINPUT_VERSION, &GUID_SysMouseEm ); + hr = IDirectInputDevice8_Initialize( device, instance, version, &GUID_SysMouseEm ); ok( hr == DI_OK, "Initialize returned %#lx\n", hr ); guid = GUID_SysMouseEm; memset( &devinst, 0, sizeof(devinst) ); @@ -1603,7 +1627,7 @@ static void test_mouse_info(void) ok( IsEqualGUID( &guid, &GUID_SysMouseEm ), "got %s expected %s\n", debugstr_guid( &guid ), debugstr_guid( &GUID_SysMouseEm ) );
- hr = IDirectInputDevice8_Initialize( device, instance, DIRECTINPUT_VERSION, &GUID_SysMouse ); + hr = IDirectInputDevice8_Initialize( device, instance, version, &GUID_SysMouse ); ok( hr == DI_OK, "Initialize returned %#lx\n", hr );
memset( &devinst, 0, sizeof(devinst) ); @@ -1621,6 +1645,16 @@ static void test_mouse_info(void) check_member( devinst, expect_devinst, "%04x", wUsagePage ); check_member( devinst, expect_devinst, "%04x", wUsage );
+ devinst.dwSize = sizeof(DIDEVICEINSTANCE_DX3W); + hr = IDirectInputDevice8_GetDeviceInfo( device, &devinst ); + ok( hr == DI_OK, "GetDeviceInfo returned %#lx\n", hr ); + check_member_guid( devinst, expect_devinst, guidInstance ); + check_member_guid( devinst, expect_devinst, guidProduct ); + todo_wine + check_member( devinst, expect_devinst, "%#lx", dwDevType ); + if (!localized) check_member_wstr( devinst, expect_devinst, tszInstanceName ); + if (!localized) todo_wine check_member_wstr( devinst, expect_devinst, tszProductName ); + caps.dwSize = sizeof(DIDEVCAPS); hr = IDirectInputDevice8_GetCapabilities( device, &caps ); ok( hr == DI_OK, "GetCapabilities returned %#lx\n", hr ); @@ -1695,8 +1729,13 @@ static void test_mouse_info(void) hr = IDirectInputDevice8_GetProperty( device, DIPROP_TYPENAME, &prop_string.diph ); ok( hr == DIERR_UNSUPPORTED, "GetProperty DIPROP_TYPENAME returned %#lx\n", hr ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_USERNAME, &prop_string.diph ); - ok( hr == S_FALSE, "GetProperty DIPROP_USERNAME returned %#lx\n", hr ); - ok( !wcscmp( prop_string.wsz, L"" ), "got user %s\n", debugstr_w(prop_string.wsz) ); + if (version < 0x0800) + ok( hr == DIERR_UNSUPPORTED, "GetProperty DIPROP_USERNAME returned %#lx\n", hr ); + else + { + ok( hr == DI_NOEFFECT, "GetProperty DIPROP_USERNAME returned %#lx\n", hr ); + ok( !wcscmp( prop_string.wsz, L"" ), "got user %s\n", debugstr_w(prop_string.wsz) ); + }
hr = IDirectInputDevice8_GetProperty( device, DIPROP_JOYSTICKID, &prop_dword.diph ); ok( hr == DIERR_UNSUPPORTED, "GetProperty DIPROP_VIDPID returned %#lx\n", hr ); @@ -1717,6 +1756,12 @@ static void test_mouse_info(void) hr = IDirectInputDevice8_GetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph ); ok( hr == DIERR_UNSUPPORTED, "GetProperty DIPROP_GRANULARITY returned %#lx\n", hr );
+ prop_dword.diph.dwHow = DIPH_BYID; + prop_dword.diph.dwObj = DIDFT_MAKEINSTANCE(1) | DIDFT_RELAXIS; + prop_dword.dwData = 0xdeadbeef; + hr = IDirectInputDevice8_GetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph ); + ok( hr == DI_OK, "GetProperty DIPROP_GRANULARITY returned %#lx\n", hr ); + ok( prop_dword.dwData == 1, "got %ld expected 1\n", prop_dword.dwData ); prop_dword.diph.dwHow = DIPH_BYOFFSET; prop_dword.diph.dwObj = DIMOFS_X; prop_dword.dwData = 0xdeadbeef; @@ -1816,8 +1861,8 @@ static void test_mouse_info(void) ref = IDirectInputDevice8_Release( device ); ok( ref == 0, "Release returned %ld\n", ref );
- ref = IDirectInput8_Release( di ); - ok( ref == 0, "Release returned %ld\n", ref ); + winetest_pop_context(); + localized = old_localized; }
static void test_keyboard_info(void) @@ -2166,7 +2211,10 @@ START_TEST(device8) test_overlapped_format( 0x700 ); test_overlapped_format( 0x800 );
- test_mouse_info(); + test_sys_mouse( 0x500 ); + test_sys_mouse( 0x700 ); + test_sys_mouse( 0x800 ); + test_keyboard_info(); test_action_mapping(); test_save_settings(); diff --git a/dlls/dinput/tests/mouse.c b/dlls/dinput/tests/mouse.c index 2d92fe2b14c..2079c5e1408 100644 --- a/dlls/dinput/tests/mouse.c +++ b/dlls/dinput/tests/mouse.c @@ -195,99 +195,11 @@ static void test_acquire(IDirectInputA *pDI, HWND hwnd) hr = IDirectInputDevice_GetDeviceData(pMouse, sizeof(mouse_state), &mouse_state, &cnt, 0); ok(hr == DI_OK && cnt == 1, "GetDeviceData() failed: %#lx cnt:%lu\n", hr, cnt);
- /* Check for granularity property using BYOFFSET */ - memset(&di_op, 0, sizeof(di_op)); - di_op.diph.dwHow = DIPH_BYOFFSET; - di_op.diph.dwObj = DIMOFS_Y; - di_op.diph.dwSize = sizeof(DIPROPDWORD); - di_op.diph.dwHeaderSize = sizeof(DIPROPHEADER); - hr = IDirectInputDevice_GetProperty(pMouse, DIPROP_GRANULARITY, &di_op.diph); - /* Granularity of Y axis should be 1! */ - ok(hr == S_OK && di_op.dwData == 1, "GetProperty(): %#lx, dwData: %lu but should be 1.\n", hr, di_op.dwData); - - /* Check for granularity property using BYID */ - memset(&di_op, 0, sizeof(di_op)); - di_op.diph.dwHow = DIPH_BYID; - /* WINE_MOUSE_Y_AXIS_INSTANCE := 1 */ - di_op.diph.dwObj = (DIDFT_MAKEINSTANCE(1) | DIDFT_RELAXIS); - di_op.diph.dwSize = sizeof(DIPROPDWORD); - di_op.diph.dwHeaderSize = sizeof(DIPROPHEADER); - hr = IDirectInputDevice_GetProperty(pMouse, DIPROP_GRANULARITY, &di_op.diph); - /* Granularity of Y axis should be 1! */ - ok(hr == S_OK && di_op.dwData == 1, "GetProperty(): %#lx, dwData: %lu but should be 1.\n", hr, di_op.dwData); - - memset(&di_op, 0, sizeof(di_op)); - di_op.diph.dwSize = sizeof(DIPROPDWORD); - di_op.diph.dwHeaderSize = sizeof(DIPROPHEADER); - di_op.diph.dwHow = DIPH_DEVICE; - di_op.diph.dwObj = 0; - hr = IDirectInputDevice_GetProperty(pMouse, DIPROP_VIDPID, &di_op.diph); - ok(hr == DIERR_UNSUPPORTED, "got %#lx\n", hr); - IUnknown_Release(pMouse);
DestroyWindow( hwnd2 ); }
-static void test_GetDeviceInfo(IDirectInputA *pDI) -{ - HRESULT hr; - IDirectInputDeviceA *pMouse = NULL; - DIDEVICEINSTANCEA instA; - DIDEVICEINSTANCE_DX3A inst3A; - - hr = IDirectInput_CreateDevice(pDI, &GUID_SysMouse, &pMouse, NULL); - ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %#lx\n", hr); - if (FAILED(hr)) return; - - instA.dwSize = sizeof(instA); - hr = IDirectInputDevice_GetDeviceInfo(pMouse, &instA); - ok(SUCCEEDED(hr), "got %#lx\n", hr); - - inst3A.dwSize = sizeof(inst3A); - hr = IDirectInputDevice_GetDeviceInfo(pMouse, (DIDEVICEINSTANCEA *)&inst3A); - ok(SUCCEEDED(hr), "got %#lx\n", hr); - - ok(instA.dwSize != inst3A.dwSize, "got %lu, %lu\n", instA.dwSize, inst3A.dwSize); - ok(IsEqualGUID(&instA.guidInstance, &inst3A.guidInstance), "got %s, %s\n", - wine_dbgstr_guid(&instA.guidInstance), wine_dbgstr_guid(&inst3A.guidInstance) ); - ok(IsEqualGUID(&instA.guidProduct, &inst3A.guidProduct), "got %s, %s\n", - wine_dbgstr_guid(&instA.guidProduct), wine_dbgstr_guid(&inst3A.guidProduct) ); - ok(instA.dwDevType == inst3A.dwDevType, "got %lu, %lu\n", instA.dwDevType, inst3A.dwDevType); - - IUnknown_Release(pMouse); -} - -static BOOL CALLBACK EnumAxes(const DIDEVICEOBJECTINSTANCEA *pdidoi, void *pContext) -{ - if (IsEqualIID(&pdidoi->guidType, &GUID_XAxis) || - IsEqualIID(&pdidoi->guidType, &GUID_YAxis) || - IsEqualIID(&pdidoi->guidType, &GUID_ZAxis)) - { - ok(pdidoi->dwFlags & DIDOI_ASPECTPOSITION, "Missing DIDOI_ASPECTPOSITION, flags are %#lx\n", - pdidoi->dwFlags); - } - else - ok(pdidoi->dwFlags == 0, "Flags are %#lx\n", pdidoi->dwFlags); - - return DIENUM_CONTINUE; -} - -static void test_mouse_EnumObjects(IDirectInputA *pDI) -{ - HRESULT hr; - IDirectInputDeviceA *pMouse = NULL; - - hr = IDirectInput_CreateDevice(pDI, &GUID_SysMouse, &pMouse, NULL); - ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %#lx\n", hr); - if (FAILED(hr)) return; - - hr = IDirectInputDevice_EnumObjects(pMouse, EnumAxes, NULL, DIDFT_ALL); - ok(hr==DI_OK,"IDirectInputDevice_EnumObjects() failed: %#lx\n", hr); - - IUnknown_Release(pMouse); -} - static void mouse_tests(void) { HRESULT hr; @@ -313,8 +225,6 @@ static void mouse_tests(void)
test_set_coop(pDI, hwnd); test_acquire(pDI, hwnd); - test_GetDeviceInfo(pDI); - test_mouse_EnumObjects(pDI);
DestroyWindow(hwnd); }