Signed-off-by: Rémi Bernon rbernon@codeweavers.com ---
v3: Fix a test result typo. Supersedes: 222839-222841
dlls/dinput/tests/joystick8.c | 453 ++++++++++++++++++++++++---------- 1 file changed, 323 insertions(+), 130 deletions(-)
diff --git a/dlls/dinput/tests/joystick8.c b/dlls/dinput/tests/joystick8.c index e986bf2d1cb..0ff76da6463 100644 --- a/dlls/dinput/tests/joystick8.c +++ b/dlls/dinput/tests/joystick8.c @@ -39,8 +39,11 @@ struct check_objects_todos { BOOL type; + BOOL ofs; BOOL guid; + BOOL flags; BOOL usage; + BOOL usage_page; BOOL name; };
@@ -77,16 +80,18 @@ static BOOL CALLBACK check_objects( const DIDEVICEOBJECTINSTANCEW *obj, void *ar check_member( *obj, *exp, "%u", dwSize ); todo_wine_if( todo->guid ) check_member_guid( *obj, *exp, guidType ); - todo_wine_if( params->version < 0x700 && (obj->dwType & DIDFT_BUTTON) ) + todo_wine_if( todo->ofs ) check_member( *obj, *exp, "%#x", dwOfs ); todo_wine_if( todo->type ) check_member( *obj, *exp, "%#x", dwType ); + todo_wine_if( todo->flags ) check_member( *obj, *exp, "%#x", dwFlags ); if (!localized) todo_wine_if( todo->name )check_member_wstr( *obj, *exp, tszName ); check_member( *obj, *exp, "%u", dwFFMaxForce ); check_member( *obj, *exp, "%u", dwFFForceResolution ); check_member( *obj, *exp, "%u", wCollectionNumber ); check_member( *obj, *exp, "%u", wDesignatorIndex ); + todo_wine_if( todo->usage_page ) check_member( *obj, *exp, "%#04x", wUsagePage ); todo_wine_if( todo->usage ) check_member( *obj, *exp, "%#04x", wUsage ); @@ -307,7 +312,7 @@ static void check_dinput_devices( DWORD version, DIDEVICEINSTANCEW *devinst ) } }
-static void test_simple_joystick(void) +static void test_simple_joystick( DWORD version ) { #include "psh_hid_macros.h" static const unsigned char report_desc[] = @@ -363,11 +368,12 @@ static void test_simple_joystick(void) { .InputReportByteLength = 9, }; - static const DIDEVCAPS expect_caps = + const DIDEVCAPS expect_caps = { .dwSize = sizeof(DIDEVCAPS), .dwFlags = DIDC_ATTACHED | DIDC_EMULATED, - .dwDevType = DIDEVTYPE_HID | (DI8DEVTYPEJOYSTICK_LIMITED << 8) | DI8DEVTYPE_JOYSTICK, + .dwDevType = version >= 0x800 ? DIDEVTYPE_HID | (DI8DEVTYPEJOYSTICK_LIMITED << 8) | DI8DEVTYPE_JOYSTICK + : DIDEVTYPE_HID | (DIDEVTYPEJOYSTICK_RUDDER << 8) | DIDEVTYPE_JOYSTICK, .dwAxes = 6, .dwPOVs = 1, .dwButtons = 2, @@ -452,7 +458,8 @@ static void test_simple_joystick(void) .dwSize = sizeof(DIDEVICEINSTANCEW), .guidInstance = expect_guid_product, .guidProduct = expect_guid_product, - .dwDevType = DIDEVTYPE_HID | (DI8DEVTYPEJOYSTICK_LIMITED << 8) | DI8DEVTYPE_JOYSTICK, + .dwDevType = version >= 0x800 ? DIDEVTYPE_HID | (DI8DEVTYPEJOYSTICK_LIMITED << 8) | DI8DEVTYPE_JOYSTICK + : DIDEVTYPE_HID | (DIDEVTYPEJOYSTICK_RUDDER << 8) | DIDEVTYPE_JOYSTICK, .tszInstanceName = L"Wine test root driver", .tszProductName = L"Wine test root driver", .guidFFDriver = GUID_NULL, @@ -580,14 +587,110 @@ static void test_simple_joystick(void) .wUsage = HID_USAGE_GENERIC_JOYSTICK, }, }; - const DIEFFECTINFOW expect_effects[] = {}; - + const DIDEVICEOBJECTINSTANCEW expect_objects_5[] = + { + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_XAxis, + .dwOfs = DIJOFS_X, + .dwType = DIDFT_ABSAXIS|DIDFT_MAKEINSTANCE(0), + .dwFlags = DIDOI_ASPECTPOSITION, + .tszName = L"X Axis", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_GENERIC, + .wUsage = HID_USAGE_GENERIC_X, + .wReportId = 1, + }, + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_YAxis, + .dwOfs = DIJOFS_Y, + .dwType = DIDFT_ABSAXIS|DIDFT_MAKEINSTANCE(1), + .dwFlags = DIDOI_ASPECTPOSITION, + .tszName = L"Y Axis", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_GENERIC, + .wUsage = HID_USAGE_GENERIC_Y, + .wReportId = 1, + }, + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_ZAxis, + .dwOfs = DIJOFS_Z, + .dwType = DIDFT_ABSAXIS|DIDFT_MAKEINSTANCE(2), + .dwFlags = DIDOI_ASPECTPOSITION, + .tszName = L"Wheel", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_GENERIC, + .wUsage = HID_USAGE_GENERIC_WHEEL, + .wReportId = 1, + }, + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_RzAxis, + .dwOfs = DIJOFS_RZ, + .dwType = DIDFT_ABSAXIS|DIDFT_MAKEINSTANCE(5), + .dwFlags = DIDOI_ASPECTPOSITION, + .tszName = L"Rudder", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_SIMULATION, + .wUsage = HID_USAGE_SIMULATION_RUDDER, + .wReportId = 1, + }, + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_POV, + .dwOfs = DIJOFS_POV(0), + .dwType = DIDFT_POV|DIDFT_MAKEINSTANCE(0), + .tszName = L"Hat Switch", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_GENERIC, + .wUsage = HID_USAGE_GENERIC_HATSWITCH, + .wReportId = 1, + }, + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_Button, + .dwOfs = DIJOFS_BUTTON(0), + .dwType = DIDFT_PSHBUTTON|DIDFT_MAKEINSTANCE(0), + .tszName = L"Button 0", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_BUTTON, + .wUsage = 0x1, + .wReportId = 1, + }, + { + .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW), + .guidType = GUID_Button, + .dwOfs = DIJOFS_BUTTON(1), + .dwType = DIDFT_PSHBUTTON|DIDFT_MAKEINSTANCE(1), + .tszName = L"Button 1", + .wCollectionNumber = 1, + .wUsagePage = HID_USAGE_PAGE_BUTTON, + .wUsage = 0x2, + .wReportId = 1, + }, + }; + struct check_objects_todos todo_objects_5[ARRAY_SIZE(expect_objects_5)] = + { + {.guid = TRUE, .type = TRUE, .flags = TRUE, .usage = TRUE, .usage_page = TRUE, .name = TRUE}, + {.guid = TRUE, .type = TRUE, .flags = TRUE, .usage = TRUE, .usage_page = TRUE, .name = TRUE}, + {.guid = TRUE, .type = TRUE, .usage = TRUE, .usage_page = TRUE, .name = TRUE}, + {.guid = TRUE, .ofs = TRUE, .type = TRUE, .usage = TRUE, .usage_page = TRUE, .name = TRUE}, + {.guid = TRUE, .ofs = TRUE, .type = TRUE, .flags = TRUE, .usage = TRUE, .name = TRUE}, + {.guid = TRUE, .ofs = TRUE, .type = TRUE, .flags = TRUE, .usage = TRUE, .usage_page = TRUE, .name = TRUE}, + {.guid = TRUE, .ofs = TRUE, .type = TRUE, .usage = TRUE, .usage_page = TRUE, .name = TRUE}, + }; struct check_objects_params check_objects_params = { - .version = DIRECTINPUT_VERSION, - .expect_count = ARRAY_SIZE(expect_objects), - .expect_objs = expect_objects, + .version = version, + .expect_count = version < 0x700 ? ARRAY_SIZE(expect_objects_5) : ARRAY_SIZE(expect_objects), + .expect_objs = version < 0x700 ? expect_objects_5 : expect_objects, + .todo_objs = version < 0x700 ? todo_objects_5 : NULL, + .todo_extra = version < 0x700 ? TRUE : FALSE, }; + + const DIEFFECTINFOW expect_effects[] = {}; struct check_effects_params check_effects_params = { .expect_count = ARRAY_SIZE(expect_effects), @@ -641,46 +744,57 @@ static void test_simple_joystick(void) WCHAR cwd[MAX_PATH], tempdir[MAX_PATH]; DIDEVICEOBJECTDATA objdata[32] = {{0}}; DIDEVICEOBJECTINSTANCEW objinst = {0}; + DIDEVICEOBJECTINSTANCEW expect_obj; DIDEVICEINSTANCEW devinst = {0}; DIEFFECTINFOW effectinfo = {0}; DIDATAFORMAT dataformat = {0}; IDirectInputDevice8W *device; IDirectInputEffect *effect; DIEFFESCAPE escape = {0}; + ULONG i, size, res, ref; DIDEVCAPS caps = {0}; HANDLE event, file; char buffer[1024]; DIJOYSTATE2 state; - ULONG i, res, ref; HRESULT hr; WCHAR *tmp; GUID guid; HWND hwnd;
+ winetest_push_context( "%#x", version ); + GetCurrentDirectoryW( ARRAY_SIZE(cwd), cwd ); GetTempPathW( ARRAY_SIZE(tempdir), tempdir ); SetCurrentDirectoryW( tempdir );
cleanup_registry_keys(); if (!dinput_driver_start( report_desc, sizeof(report_desc), &hid_caps, NULL, 0 )) goto done; - if (FAILED(hr = dinput_test_create_device( DIRECTINPUT_VERSION, &devinst, &device ))) goto done; + if (FAILED(hr = dinput_test_create_device( version, &devinst, &device ))) goto done;
- check_dinput_devices( DIRECTINPUT_VERSION, &devinst ); + check_dinput_devices( version, &devinst );
- hr = IDirectInputDevice8_Initialize( device, instance, 0x0700, &GUID_NULL ); - todo_wine - ok( hr == DIERR_BETADIRECTINPUTVERSION, "Initialize returned %#x\n", hr ); - hr = IDirectInputDevice8_Initialize( device, instance, DIRECTINPUT_VERSION, NULL ); + hr = IDirectInputDevice8_Initialize( device, instance, 0x800 - (version - 0x700), &GUID_NULL ); + if (version == 0x800) + { + todo_wine + ok( hr == DIERR_BETADIRECTINPUTVERSION, "Initialize returned %#x\n", hr ); + } + else + { + todo_wine + ok( hr == DIERR_OLDDIRECTINPUTVERSION, "Initialize returned %#x\n", hr ); + } + hr = IDirectInputDevice8_Initialize( device, instance, version, NULL ); todo_wine ok( hr == E_POINTER, "Initialize returned %#x\n", hr ); - hr = IDirectInputDevice8_Initialize( device, NULL, DIRECTINPUT_VERSION, &GUID_NULL ); + hr = IDirectInputDevice8_Initialize( device, NULL, version, &GUID_NULL ); todo_wine ok( hr == DIERR_INVALIDPARAM, "Initialize returned %#x\n", hr ); - hr = IDirectInputDevice8_Initialize( device, instance, DIRECTINPUT_VERSION, &GUID_NULL ); + hr = IDirectInputDevice8_Initialize( device, instance, version, &GUID_NULL ); todo_wine ok( hr == REGDB_E_CLASSNOTREG, "Initialize returned %#x\n", hr );
- hr = IDirectInputDevice8_Initialize( device, instance, DIRECTINPUT_VERSION, &devinst.guidInstance ); + hr = IDirectInputDevice8_Initialize( device, instance, version, &devinst.guidInstance ); ok( hr == DI_OK, "Initialize returned %#x\n", hr ); guid = devinst.guidInstance; memset( &devinst, 0, sizeof(devinst) ); @@ -689,7 +803,7 @@ static void test_simple_joystick(void) ok( hr == DI_OK, "GetDeviceInfo returned %#x\n", hr ); ok( IsEqualGUID( &guid, &devinst.guidInstance ), "got %s expected %s\n", debugstr_guid( &guid ), debugstr_guid( &devinst.guidInstance ) ); - hr = IDirectInputDevice8_Initialize( device, instance, DIRECTINPUT_VERSION, &devinst.guidProduct ); + hr = IDirectInputDevice8_Initialize( device, instance, version, &devinst.guidProduct ); ok( hr == DI_OK, "Initialize returned %#x\n", hr );
hr = IDirectInputDevice8_GetDeviceInfo( device, NULL ); @@ -704,6 +818,7 @@ static void test_simple_joystick(void) todo_wine check_member_guid( devinst, expect_devinst, guidInstance ); check_member_guid( devinst, expect_devinst, guidProduct ); + todo_wine_if( version < 0x0800 ) check_member( devinst, expect_devinst, "%#x", dwDevType ); todo_wine check_member_wstr( devinst, expect_devinst, tszInstanceName ); @@ -718,6 +833,7 @@ static void test_simple_joystick(void) todo_wine check_member_guid( devinst, expect_devinst, guidInstance ); check_member_guid( devinst, expect_devinst, guidProduct ); + todo_wine_if( version < 0x0800 ) check_member( devinst, expect_devinst, "%#x", dwDevType ); todo_wine check_member_wstr( devinst, expect_devinst, tszInstanceName ); @@ -736,6 +852,7 @@ static void test_simple_joystick(void) ok( hr == DI_OK, "GetCapabilities returned %#x\n", hr ); check_member( caps, expect_caps, "%d", dwSize ); check_member( caps, expect_caps, "%#x", dwFlags ); + todo_wine_if( version < 0x0800 ) check_member( caps, expect_caps, "%#x", dwDevType ); check_member( caps, expect_caps, "%d", dwAxes ); check_member( caps, expect_caps, "%d", dwButtons ); @@ -753,7 +870,9 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_GetProperty( device, DIPROP_VIDPID, NULL ); ok( hr == DIERR_INVALIDPARAM, "GetProperty returned %#x\n", hr ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_VIDPID, &prop_string.diph ); - ok( hr == DIERR_INVALIDPARAM, "GetProperty returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_INVALIDPARAM), + "GetProperty DIPROP_VIDPID returned %#x\n", hr ); prop_dword.diph.dwHeaderSize = sizeof(DIPROPHEADER) - 1; hr = IDirectInputDevice8_GetProperty( device, DIPROP_VIDPID, &prop_dword.diph ); ok( hr == DIERR_INVALIDPARAM, "GetProperty returned %#x\n", hr ); @@ -761,8 +880,14 @@ static void test_simple_joystick(void)
prop_dword.dwData = 0xdeadbeef; hr = IDirectInputDevice8_GetProperty( device, DIPROP_VIDPID, &prop_dword.diph ); - ok( hr == DI_OK, "GetProperty DIPROP_VIDPID returned %#x\n", hr ); - ok( prop_dword.dwData == EXPECT_VIDPID, "got %#x expected %#x\n", prop_dword.dwData, EXPECT_VIDPID ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "GetProperty DIPROP_VIDPID returned %#x\n", hr ); + if (hr == DI_OK) + { + ok( prop_dword.dwData == EXPECT_VIDPID, "got %#x expected %#x\n", + prop_dword.dwData, EXPECT_VIDPID ); + }
hr = IDirectInputDevice8_GetProperty( device, DIPROP_GUIDANDPATH, &prop_guid_path.diph ); ok( hr == DI_OK, "GetProperty DIPROP_GUIDANDPATH returned %#x\n", hr ); @@ -791,14 +916,23 @@ static void test_simple_joystick(void) ok( !wcscmp( prop_string.wsz, expect_devinst.tszProductName ), "got product %s\n", debugstr_w(prop_string.wsz) ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_TYPENAME, &prop_string.diph ); - todo_wine - ok( hr == DI_OK, "GetProperty DIPROP_TYPENAME returned %#x\n", hr ); - todo_wine - ok( !wcscmp( prop_string.wsz, expect_vidpid_str ), "got type %s\n", debugstr_w(prop_string.wsz) ); + todo_wine_if( version >= 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "GetProperty DIPROP_TYPENAME returned %#x\n", hr ); + if (hr == DI_OK) + { + todo_wine + ok( !wcscmp( prop_string.wsz, expect_vidpid_str ), "got type %s\n", debugstr_w(prop_string.wsz) ); + } hr = IDirectInputDevice8_GetProperty( device, DIPROP_USERNAME, &prop_string.diph ); - ok( hr == S_FALSE, "GetProperty DIPROP_USERNAME returned %#x\n", hr ); - todo_wine - ok( !wcscmp( prop_string.wsz, L"" ), "got user %s\n", debugstr_w(prop_string.wsz) ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_NOEFFECT), + "GetProperty DIPROP_USERNAME returned %#x\n", hr ); + if (hr == DI_NOEFFECT) + { + todo_wine + ok( !wcscmp( prop_string.wsz, L"" ), "got user %s\n", debugstr_w(prop_string.wsz) ); + }
prop_dword.dwData = 0xdeadbeef; hr = IDirectInputDevice8_GetProperty( device, DIPROP_JOYSTICKID, &prop_dword.diph ); @@ -838,7 +972,9 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph ); ok( hr == DIERR_UNSUPPORTED, "GetProperty DIPROP_RANGE returned %#x\n", hr ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_KEYNAME, &prop_string.diph ); - ok( hr == DIERR_INVALIDPARAM, "GetProperty DIPROP_KEYNAME returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_INVALIDPARAM), + "GetProperty DIPROP_KEYNAME returned %#x\n", hr ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_LOGICALRANGE, &prop_range.diph ); ok( hr == DIERR_UNSUPPORTED, "GetProperty DIPROP_LOGICALRANGE returned %#x\n", hr ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_PHYSICALRANGE, &prop_range.diph ); @@ -867,9 +1003,14 @@ static void test_simple_joystick(void) prop_string.diph.dwHow = DIPH_BYUSAGE; prop_string.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_KEYNAME, &prop_string.diph ); - ok( hr == DI_OK, "GetProperty DIPROP_KEYNAME returned %#x\n", hr ); - ok( !wcscmp( prop_string.wsz, expect_objects[4].tszName ), "got DIPROP_KEYNAME %s\n", - debugstr_w(prop_string.wsz) ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "GetProperty DIPROP_KEYNAME returned %#x\n", hr ); + if (hr == DI_OK) + { + ok( !wcscmp( prop_string.wsz, expect_objects[4].tszName ), "got DIPROP_KEYNAME %s\n", + debugstr_w(prop_string.wsz) ); + } prop_string.diph.dwObj = MAKELONG( 0x1, HID_USAGE_PAGE_BUTTON ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_KEYNAME, &prop_string.diph ); todo_wine @@ -884,7 +1025,9 @@ static void test_simple_joystick(void) prop_range.lMin = 0xdeadbeef; prop_range.lMax = 0xdeadbeef; hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph ); - ok( hr == DIERR_NOTFOUND, "GetProperty DIPROP_RANGE returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DI_OK : DIERR_NOTFOUND), + "GetProperty DIPROP_RANGE returned %#x\n", hr ); prop_range.diph.dwObj = MAKELONG( 0, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph ); ok( hr == DIERR_NOTFOUND, "GetProperty DIPROP_RANGE returned %#x\n", hr ); @@ -899,19 +1042,30 @@ static void test_simple_joystick(void) ok( prop_range.lMin == 0, "got %d expected %d\n", prop_range.lMin, 0 ); ok( prop_range.lMax == 65535, "got %d expected %d\n", prop_range.lMax, 65535 ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_LOGICALRANGE, &prop_range.diph ); - ok( hr == DI_OK, "GetProperty DIPROP_LOGICALRANGE returned %#x\n", hr ); - ok( prop_range.lMin == -25, "got %d expected %d\n", prop_range.lMin, -25 ); - ok( prop_range.lMax == 56, "got %d expected %d\n", prop_range.lMax, 56 ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "GetProperty DIPROP_LOGICALRANGE returned %#x\n", hr ); + if (hr == DI_OK) + { + ok( prop_range.lMin == -25, "got %d expected %d\n", prop_range.lMin, -25 ); + ok( prop_range.lMax == 56, "got %d expected %d\n", prop_range.lMax, 56 ); + } hr = IDirectInputDevice8_GetProperty( device, DIPROP_PHYSICALRANGE, &prop_range.diph ); - ok( hr == DI_OK, "GetProperty DIPROP_PHYSICALRANGE returned %#x\n", hr ); - ok( prop_range.lMin == -25, "got %d expected %d\n", prop_range.lMin, -25 ); - ok( prop_range.lMax == 56, "got %d expected %d\n", prop_range.lMax, 56 ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "GetProperty DIPROP_PHYSICALRANGE returned %#x\n", hr ); + if (hr == DI_OK) + { + ok( prop_range.lMin == -25, "got %d expected %d\n", prop_range.lMin, -25 ); + ok( prop_range.lMax == 56, "got %d expected %d\n", prop_range.lMax, 56 ); + }
prop_pointer.diph.dwHow = DIPH_BYUSAGE; prop_pointer.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_APPDATA, &prop_pointer.diph ); - todo_wine - ok( hr == DIERR_NOTINITIALIZED, "GetProperty DIPROP_APPDATA returned %#x\n", hr ); + todo_wine_if( version >= 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_NOTINITIALIZED), + "GetProperty DIPROP_APPDATA returned %#x\n", hr );
hr = IDirectInputDevice8_EnumObjects( device, NULL, NULL, DIDFT_ALL ); ok( hr == DIERR_INVALIDPARAM, "EnumObjects returned %#x\n", hr ); @@ -920,7 +1074,8 @@ static void test_simple_joystick(void) res = 0; hr = IDirectInputDevice8_EnumObjects( device, check_object_count, &res, DIDFT_AXIS | DIDFT_PSHBUTTON ); ok( hr == DI_OK, "EnumObjects returned %#x\n", hr ); - ok( res == 8, "got %u expected %u\n", res, 8 ); + todo_wine_if( version < 0x0700 ) + ok( res == (version < 0x0700 ? 6 : 8), "got %u objects\n", res ); hr = IDirectInputDevice8_EnumObjects( device, check_objects, &check_objects_params, DIDFT_ALL ); ok( hr == DI_OK, "EnumObjects returned %#x\n", hr ); ok( check_objects_params.index >= check_objects_params.expect_count, "missing %u objects\n", @@ -936,26 +1091,30 @@ static void test_simple_joystick(void)
res = MAKELONG( HID_USAGE_GENERIC_Z, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, res, DIPH_BYUSAGE ); - ok( hr == DIERR_NOTFOUND, "GetObjectInfo returned: %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DI_OK : DIERR_NOTFOUND), "GetObjectInfo returned: %#x\n", hr ); res = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, res, DIPH_BYUSAGE ); ok( hr == DI_OK, "GetObjectInfo returned: %#x\n", hr );
- check_member( objinst, expect_objects[4], "%u", dwSize ); - check_member_guid( objinst, expect_objects[4], guidType ); - check_member( objinst, expect_objects[4], "%#x", dwOfs ); - check_member( objinst, expect_objects[4], "%#x", dwType ); - check_member( objinst, expect_objects[4], "%#x", dwFlags ); - if (!localized) check_member_wstr( objinst, expect_objects[4], tszName ); - check_member( objinst, expect_objects[4], "%u", dwFFMaxForce ); - check_member( objinst, expect_objects[4], "%u", dwFFForceResolution ); - check_member( objinst, expect_objects[4], "%u", wCollectionNumber ); - check_member( objinst, expect_objects[4], "%u", wDesignatorIndex ); - check_member( objinst, expect_objects[4], "%#04x", wUsagePage ); - check_member( objinst, expect_objects[4], "%#04x", wUsage ); - check_member( objinst, expect_objects[4], "%#04x", dwDimension ); - check_member( objinst, expect_objects[4], "%#04x", wExponent ); - check_member( objinst, expect_objects[4], "%u", wReportId ); + if (version < 0x0700) expect_obj = expect_objects_5[0]; + else expect_obj = expect_objects[4]; + check_member( objinst, expect_obj, "%u", dwSize ); + check_member_guid( objinst, expect_obj, guidType ); + todo_wine_if( version < 0x0700 ) + check_member( objinst, expect_obj, "%#x", dwOfs ); + check_member( objinst, expect_obj, "%#x", dwType ); + check_member( objinst, expect_obj, "%#x", dwFlags ); + if (!localized) check_member_wstr( objinst, expect_obj, tszName ); + check_member( objinst, expect_obj, "%u", dwFFMaxForce ); + check_member( objinst, expect_obj, "%u", dwFFForceResolution ); + check_member( objinst, expect_obj, "%u", wCollectionNumber ); + check_member( objinst, expect_obj, "%u", wDesignatorIndex ); + check_member( objinst, expect_obj, "%#04x", wUsagePage ); + check_member( objinst, expect_obj, "%#04x", wUsage ); + check_member( objinst, expect_obj, "%#04x", dwDimension ); + check_member( objinst, expect_obj, "%#04x", wExponent ); + check_member( objinst, expect_obj, "%u", wReportId );
hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, 0x14, DIPH_BYOFFSET ); ok( hr == DIERR_NOTFOUND, "GetObjectInfo returned: %#x\n", hr ); @@ -968,21 +1127,24 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, res, DIPH_BYID ); ok( hr == DI_OK, "GetObjectInfo returned: %#x\n", hr );
- check_member( objinst, expect_objects[8], "%u", dwSize ); - check_member_guid( objinst, expect_objects[8], guidType ); - check_member( objinst, expect_objects[8], "%#x", dwOfs ); - check_member( objinst, expect_objects[8], "%#x", dwType ); - check_member( objinst, expect_objects[8], "%#x", dwFlags ); - if (!localized) check_member_wstr( objinst, expect_objects[8], tszName ); - check_member( objinst, expect_objects[8], "%u", dwFFMaxForce ); - check_member( objinst, expect_objects[8], "%u", dwFFForceResolution ); - check_member( objinst, expect_objects[8], "%u", wCollectionNumber ); - check_member( objinst, expect_objects[8], "%u", wDesignatorIndex ); - check_member( objinst, expect_objects[8], "%#04x", wUsagePage ); - check_member( objinst, expect_objects[8], "%#04x", wUsage ); - check_member( objinst, expect_objects[8], "%#04x", dwDimension ); - check_member( objinst, expect_objects[8], "%#04x", wExponent ); - check_member( objinst, expect_objects[8], "%u", wReportId ); + if (version < 0x0700) expect_obj = expect_objects_5[6]; + else expect_obj = expect_objects[8]; + check_member( objinst, expect_obj, "%u", dwSize ); + check_member_guid( objinst, expect_obj, guidType ); + todo_wine_if( version < 0x0700 ) + check_member( objinst, expect_obj, "%#x", dwOfs ); + check_member( objinst, expect_obj, "%#x", dwType ); + check_member( objinst, expect_obj, "%#x", dwFlags ); + if (!localized) check_member_wstr( objinst, expect_obj, tszName ); + check_member( objinst, expect_obj, "%u", dwFFMaxForce ); + check_member( objinst, expect_obj, "%u", dwFFForceResolution ); + check_member( objinst, expect_obj, "%u", wCollectionNumber ); + check_member( objinst, expect_obj, "%u", wDesignatorIndex ); + check_member( objinst, expect_obj, "%#04x", wUsagePage ); + check_member( objinst, expect_obj, "%#04x", wUsage ); + check_member( objinst, expect_obj, "%#04x", dwDimension ); + check_member( objinst, expect_obj, "%#04x", wExponent ); + check_member( objinst, expect_obj, "%u", wReportId );
hr = IDirectInputDevice8_EnumEffects( device, NULL, NULL, DIEFT_ALL ); ok( hr == DIERR_INVALIDPARAM, "EnumEffects returned %#x\n", hr ); @@ -1026,21 +1188,25 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, DIJOFS_Y, DIPH_BYOFFSET ); ok( hr == DI_OK, "GetObjectInfo returned: %#x\n", hr );
- check_member( objinst, expect_objects[3], "%u", dwSize ); - check_member_guid( objinst, expect_objects[3], guidType ); - check_member( objinst, expect_objects[3], "%#x", dwOfs ); - check_member( objinst, expect_objects[3], "%#x", dwType ); - check_member( objinst, expect_objects[3], "%#x", dwFlags ); - if (!localized) check_member_wstr( objinst, expect_objects[3], tszName ); - check_member( objinst, expect_objects[3], "%u", dwFFMaxForce ); - check_member( objinst, expect_objects[3], "%u", dwFFForceResolution ); - check_member( objinst, expect_objects[3], "%u", wCollectionNumber ); - check_member( objinst, expect_objects[3], "%u", wDesignatorIndex ); - check_member( objinst, expect_objects[3], "%#04x", wUsagePage ); - check_member( objinst, expect_objects[3], "%#04x", wUsage ); - check_member( objinst, expect_objects[3], "%#04x", dwDimension ); - check_member( objinst, expect_objects[3], "%#04x", wExponent ); - check_member( objinst, expect_objects[3], "%u", wReportId ); + if (version < 0x0700) expect_obj = expect_objects_5[1]; + else expect_obj = expect_objects[3]; + if (version < 0x0800) expect_obj.dwOfs = DIJOFS_Y; + check_member( objinst, expect_obj, "%u", dwSize ); + check_member_guid( objinst, expect_obj, guidType ); + todo_wine_if( version < 0x0800 ) + check_member( objinst, expect_obj, "%#x", dwOfs ); + check_member( objinst, expect_obj, "%#x", dwType ); + check_member( objinst, expect_obj, "%#x", dwFlags ); + if (!localized) check_member_wstr( objinst, expect_obj, tszName ); + check_member( objinst, expect_obj, "%u", dwFFMaxForce ); + check_member( objinst, expect_obj, "%u", dwFFForceResolution ); + check_member( objinst, expect_obj, "%u", wCollectionNumber ); + check_member( objinst, expect_obj, "%u", wDesignatorIndex ); + check_member( objinst, expect_obj, "%#04x", wUsagePage ); + check_member( objinst, expect_obj, "%#04x", wUsage ); + check_member( objinst, expect_obj, "%#04x", dwDimension ); + check_member( objinst, expect_obj, "%#04x", wExponent ); + check_member( objinst, expect_obj, "%u", wReportId );
hr = IDirectInputDevice8_SetEventNotification( device, (HANDLE)0xdeadbeef ); todo_wine @@ -1101,7 +1267,8 @@ static void test_simple_joystick(void) ok( hr == DI_OK, "Acquire returned: %#x\n", hr );
hr = IDirectInputDevice8_Poll( device ); - ok( hr == DI_NOEFFECT, "Poll returned: %#x\n", hr ); + todo_wine_if( version < 0x0700 ) + ok( hr == (version < 0x0700 ? DI_OK : DI_NOEFFECT), "Poll returned: %#x\n", hr );
hr = IDirectInputDevice8_GetDeviceState( device, sizeof(DIJOYSTATE2) + 1, &state ); ok( hr == DIERR_INVALIDPARAM, "GetDeviceState returned: %#x\n", hr ); @@ -1145,11 +1312,12 @@ static void test_simple_joystick(void) winetest_pop_context();
res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA) - 1, objdata, &res, DIGDD_PEEK ); - todo_wine - ok( hr == DIERR_INVALIDPARAM, "GetDeviceData returned %#x\n", hr ); + size = version < 0x0800 ? sizeof(DIDEVICEOBJECTDATA_DX3) : sizeof(DIDEVICEOBJECTDATA); + hr = IDirectInputDevice8_GetDeviceData( device, size - 1, objdata, &res, DIGDD_PEEK ); + todo_wine_if( version >= 0x0800 ) + ok( hr == (version < 0x0800 ? DI_OK : DIERR_INVALIDPARAM), "GetDeviceData returned %#x\n", hr ); res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, DIGDD_PEEK ); ok( hr == DIERR_NOTBUFFERED, "GetDeviceData returned %#x\n", hr );
hr = IDirectInputDevice8_Unacquire( device ); @@ -1167,7 +1335,7 @@ static void test_simple_joystick(void) ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, DIGDD_PEEK ); ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); ok( res == 0, "got %u expected %u\n", res, 0 );
@@ -1177,12 +1345,13 @@ static void test_simple_joystick(void) ResetEvent( event );
res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, DIGDD_PEEK ); + todo_wine_if( version < 0x0800 ) ok( hr == DI_BUFFEROVERFLOW, "GetDeviceData returned %#x\n", hr ); ok( res == 0, "got %u expected %u\n", res, 0 ); res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 ); - todo_wine + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, 0 ); + todo_wine_if( version >= 0x0800 ) ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); ok( res == 0, "got %u expected %u\n", res, 0 );
@@ -1202,22 +1371,23 @@ static void test_simple_joystick(void) ResetEvent( event );
res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, DIGDD_PEEK ); ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); ok( res == 1, "got %u expected %u\n", res, 1 ); check_member( objdata[0], expect_objdata[0], "%#x", dwOfs ); check_member( objdata[0], expect_objdata[0], "%#x", dwData ); - ok( objdata[0].uAppData == -1, "got %p, expected %p\n", (void *)objdata[0].uAppData, (void *)-1 ); + if (version >= 0x0800) ok( objdata[0].uAppData == -1, "got %p\n", (void *)objdata[0].uAppData ); res = 4; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, 0 ); ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); ok( res == 4, "got %u expected %u\n", res, 4 ); for (i = 0; i < 4; ++i) { + DIDEVICEOBJECTDATA *ptr = (DIDEVICEOBJECTDATA *)((char *)objdata + size * i); winetest_push_context( "objdata[%d]", i ); - check_member( objdata[i], expect_objdata[1 + i], "%#x", dwOfs ); - check_member( objdata[i], expect_objdata[1 + i], "%#x", dwData ); - ok( objdata[i].uAppData == -1, "got %p, expected %p\n", (void *)objdata[i].uAppData, (void *)-1 ); + check_member( *ptr, expect_objdata[1 + i], "%#x", dwOfs ); + check_member( *ptr, expect_objdata[1 + i], "%#x", dwData ); + if (version >= 0x0800) ok( ptr->uAppData == -1, "got %p\n", (void *)ptr->uAppData ); winetest_pop_context(); }
@@ -1231,26 +1401,28 @@ static void test_simple_joystick(void) ResetEvent( event );
res = 1; - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, 0 ); + todo_wine_if( version < 0x0800 ) ok( hr == DI_BUFFEROVERFLOW, "GetDeviceData returned %#x\n", hr ); ok( res == 1, "got %u expected %u\n", res, 1 ); todo_wine check_member( objdata[0], expect_objdata[5], "%#x", dwOfs ); todo_wine check_member( objdata[0], expect_objdata[5], "%#x", dwData ); - ok( objdata[0].uAppData == -1, "got %p, expected %p\n", (void *)objdata[0].uAppData, (void *)-1 ); + if (version >= 0x0800) ok( objdata[0].uAppData == -1, "got %p\n", (void *)objdata[0].uAppData ); res = ARRAY_SIZE(objdata); - hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 ); + hr = IDirectInputDevice8_GetDeviceData( device, size, objdata, &res, 0 ); ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); ok( res == 8, "got %u expected %u\n", res, 8 ); for (i = 0; i < 8; ++i) { + DIDEVICEOBJECTDATA *ptr = (DIDEVICEOBJECTDATA *)((char *)objdata + size * i); winetest_push_context( "objdata[%d]", i ); todo_wine - check_member( objdata[i], expect_objdata[6 + i], "%#x", dwOfs ); + check_member( *ptr, expect_objdata[6 + i], "%#x", dwOfs ); todo_wine_if( i == 1 || i == 2 || i == 6 ) - check_member( objdata[i], expect_objdata[6 + i], "%#x", dwData ); - ok( objdata[i].uAppData == -1, "got %p, expected %p\n", (void *)objdata[i].uAppData, (void *)-1 ); + check_member( *ptr, expect_objdata[6 + i], "%#x", dwData ); + if (version >= 0x0800) ok( ptr->uAppData == -1, "got %p\n", (void *)ptr->uAppData ); winetest_pop_context(); }
@@ -1348,7 +1520,9 @@ static void test_simple_joystick(void) ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr ); objdataformat[1].dwType = DIDFT_AXIS | DIDFT_MAKEINSTANCE( 0xff ); hr = IDirectInputDevice8_SetDataFormat( device, &dataformat ); - ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr ); + todo_wine_if( version < 0x0700 ) + ok( hr == (version < 0x0700 ? DI_OK : DIERR_INVALIDPARAM), + "SetDataFormat returned: %#x\n", hr ); objdataformat[1].dwType = DIDFT_AXIS | DIDFT_MAKEINSTANCE( 1 ); hr = IDirectInputDevice8_SetDataFormat( device, &dataformat ); ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr ); @@ -1450,9 +1624,13 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_SetProperty( device, DIPROP_RANGE, &prop_range.diph ); ok( hr == DI_OK, "SetProperty DIPROP_RANGE returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_LOGICALRANGE, &prop_range.diph ); - ok( hr == DIERR_ACQUIRED, "SetProperty DIPROP_LOGICALRANGE returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_ACQUIRED), + "SetProperty DIPROP_LOGICALRANGE returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_PHYSICALRANGE, &prop_range.diph ); - ok( hr == DIERR_ACQUIRED, "SetProperty DIPROP_PHYSICALRANGE returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_ACQUIRED), + "SetProperty DIPROP_PHYSICALRANGE returned %#x\n", hr );
hr = IDirectInputDevice8_Unacquire( device ); ok( hr == DI_OK, "Unacquire returned: %#x\n", hr ); @@ -1505,13 +1683,17 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_SetProperty( device, DIPROP_VIDPID, NULL ); ok( hr == DIERR_INVALIDPARAM, "SetProperty returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_VIDPID, &prop_string.diph ); - ok( hr == DIERR_INVALIDPARAM, "SetProperty returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_INVALIDPARAM), + "SetProperty DIPROP_VIDPID returned %#x\n", hr );
prop_dword.diph.dwHow = DIPH_DEVICE; prop_dword.diph.dwObj = 0; prop_dword.dwData = 0xdeadbeef; hr = IDirectInputDevice8_SetProperty( device, DIPROP_VIDPID, &prop_dword.diph ); - ok( hr == DIERR_READONLY, "SetProperty DIPROP_VIDPID returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_READONLY), + "SetProperty DIPROP_VIDPID returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_GUIDANDPATH, &prop_guid_path.diph ); ok( hr == DIERR_READONLY, "SetProperty DIPROP_GUIDANDPATH returned %#x\n", hr );
@@ -1532,9 +1714,13 @@ static void test_simple_joystick(void) debugstr_w(prop_string.wsz) );
hr = IDirectInputDevice8_SetProperty( device, DIPROP_TYPENAME, &prop_string.diph ); - ok( hr == DIERR_READONLY, "SetProperty DIPROP_TYPENAME returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_READONLY), + "SetProperty DIPROP_TYPENAME returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_USERNAME, &prop_string.diph ); - ok( hr == DIERR_READONLY, "SetProperty DIPROP_USERNAME returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_READONLY), + "SetProperty DIPROP_USERNAME returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_FFLOAD, &prop_dword.diph ); ok( hr == DIERR_READONLY, "SetProperty DIPROP_FFLOAD returned %#x\n", hr ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph ); @@ -1553,7 +1739,8 @@ static void test_simple_joystick(void) prop_pointer.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_SetProperty( device, DIPROP_APPDATA, &prop_pointer.diph ); todo_wine - ok( hr == DIERR_ACQUIRED, "SetProperty DIPROP_APPDATA returned %#x\n", hr ); + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DIERR_ACQUIRED), + "SetProperty DIPROP_APPDATA returned %#x\n", hr );
prop_dword.diph.dwHow = DIPH_DEVICE; prop_dword.diph.dwObj = 0; @@ -1669,8 +1856,8 @@ static void test_simple_joystick(void) hr = IDirectInputDevice8_GetDeviceState( device, sizeof(DIJOYSTATE2), &state ); ok( hr == DI_OK, "GetDeviceState returned: %#x\n", hr ); winetest_push_context( "state[%d]", i ); - todo_wine - ok( state.lX == 15, "got lX %d, expected %d\n", state.lX, 15 ); + todo_wine_if( version >= 0x0700 ) + ok( state.lX == (version < 0x0700 ? -9000 : 15), "got lX %d\n", state.lX ); check_member( state, expect_state_abs[0], "%d", lY ); check_member( state, expect_state_abs[0], "%d", lZ ); check_member( state, expect_state_abs[0], "%d", lRx ); @@ -1706,7 +1893,9 @@ static void test_simple_joystick(void) prop_pointer.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC ); prop_pointer.uData = 0xfeedcafe; hr = IDirectInputDevice8_SetProperty( device, DIPROP_APPDATA, &prop_pointer.diph ); - ok( hr == DI_OK, "SetProperty DIPROP_APPDATA returned %#x\n", hr ); + todo_wine_if( version < 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "SetProperty DIPROP_APPDATA returned %#x\n", hr );
prop_dword.dwData = 0xdeadbeef; hr = IDirectInputDevice8_SetProperty( device, DIPROP_AXISMODE, &prop_dword.diph ); @@ -1733,9 +1922,10 @@ static void test_simple_joystick(void) prop_pointer.diph.dwHow = DIPH_BYUSAGE; prop_pointer.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC ); hr = IDirectInputDevice8_GetProperty( device, DIPROP_APPDATA, &prop_pointer.diph ); - todo_wine - ok( hr == DI_OK, "GetProperty DIPROP_APPDATA returned %#x\n", hr ); - ok( prop_pointer.uData == 0xfeedcafe, "got %p expected %p\n", (void *)prop_pointer.uData, (void *)0xfeedcafe ); + todo_wine_if( version >= 0x0800 ) + ok( hr == (version < 0x0800 ? DIERR_UNSUPPORTED : DI_OK), + "GetProperty DIPROP_APPDATA returned %#x\n", hr ); + if (hr == DI_OK) ok( prop_pointer.uData == 0xfeedcafe, "got %p\n", (void *)prop_pointer.uData );
prop_dword.diph.dwHow = DIPH_DEVICE; prop_dword.diph.dwObj = 0; @@ -1815,15 +2005,15 @@ static void test_simple_joystick(void) objdata[0].dwOfs = 0xd; objdata[0].dwData = 0x80; res = 1; - hr = IDirectInputDevice8_SendDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0xdeadbeef ); + hr = IDirectInputDevice8_SendDeviceData( device, size, objdata, &res, 0xdeadbeef ); todo_wine ok( hr == DIERR_INVALIDPARAM, "SendDeviceData returned %#x\n", hr ); res = 1; - hr = IDirectInputDevice8_SendDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 1 /*DISDD_CONTINUE*/ ); + hr = IDirectInputDevice8_SendDeviceData( device, size, objdata, &res, 1 /*DISDD_CONTINUE*/ ); todo_wine ok( hr == DIERR_INVALIDPARAM, "SendDeviceData returned %#x\n", hr ); res = 1; - hr = IDirectInputDevice8_SendDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 ); + hr = IDirectInputDevice8_SendDeviceData( device, size, objdata, &res, 0 ); todo_wine ok( hr == DIERR_INVALIDPARAM, "SendDeviceData returned %#x\n", hr );
@@ -1879,6 +2069,7 @@ done: pnp_driver_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); + winetest_pop_context(); }
struct device_desc @@ -2580,7 +2771,9 @@ START_TEST( joystick8 ) test_device_types( 0x500 ); test_device_types( 0x700 );
- test_simple_joystick(); + test_simple_joystick( 0x500 ); + test_simple_joystick( 0x700 ); + test_simple_joystick( 0x800 ); } CoUninitialize();