From: Arkadiusz Hiler ahiler@codeweavers.com
--- dlls/dinput/tests/joystick8.c | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)
diff --git a/dlls/dinput/tests/joystick8.c b/dlls/dinput/tests/joystick8.c index e391104bc97..5591840b653 100644 --- a/dlls/dinput/tests/joystick8.c +++ b/dlls/dinput/tests/joystick8.c @@ -2629,6 +2629,25 @@ static BOOL test_device_types( DWORD version ) return success; }
+struct three_sliders_state { + LONG slider[3]; +}; + +static const DIOBJECTDATAFORMAT df_three_sliders[] = { + { &GUID_Slider,FIELD_OFFSET(struct three_sliders_state, slider[0]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,DIDOI_ASPECTPOSITION}, + { &GUID_Slider,FIELD_OFFSET(struct three_sliders_state, slider[1]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,DIDOI_ASPECTPOSITION}, + { &GUID_Slider,FIELD_OFFSET(struct three_sliders_state, slider[2]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,DIDOI_ASPECTPOSITION}, +}; + +static const DIDATAFORMAT c_df_three_sliders = { + sizeof(DIDATAFORMAT), + sizeof(DIOBJECTDATAFORMAT), + DIDF_ABSAXIS, + sizeof(struct three_sliders_state), + ARRAY_SIZE(df_three_sliders), + (LPDIOBJECTDATAFORMAT)df_three_sliders +}; + static void test_many_axes_joystick(void) { #include "psh_hid_macros.h" @@ -3129,6 +3148,25 @@ static void test_many_axes_joystick(void) todo_wine check_member( objinst, expect_objects[16], "%#lx", dwFlags );
+ /* make sure that we handle three sliders correctly when the format allows */ + hr = IDirectInputDevice8_SetDataFormat( device, &c_df_three_sliders ); + ok( hr == DI_OK, "SetDataFormat returned: %#lx\n", hr ); + + hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, offsetof(struct three_sliders_state, slider[0]), DIPH_BYOFFSET ); + ok( hr == DI_OK, "GetObjectInfo returned: %#lx\n", hr ); + check_object_inst( objinst, expect_objects[6] ); + check_member( objinst, expect_objects[6], "%#lx", dwFlags ); + + hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, offsetof(struct three_sliders_state, slider[1]), DIPH_BYOFFSET ); + ok( hr == DI_OK, "GetObjectInfo returned: %#lx\n", hr ); + check_object_inst( objinst, expect_objects[8] ); + check_member( objinst, expect_objects[8], "%#lx", dwFlags ); + + hr = IDirectInputDevice8_GetObjectInfo( device, &objinst, offsetof(struct three_sliders_state, slider[2]), DIPH_BYOFFSET ); + ok( hr == DI_OK, "GetObjectInfo returned: %#lx\n", hr ); + check_object_inst( objinst, expect_objects[9] ); + check_member( objinst, expect_objects[9], "%#lx", dwFlags ); + #undef check_object_inst
ref = IDirectInputDevice8_Release( device );