Rémi Bernon : dinput8/tests: Add more HID joystick SetDataFormat tests.
Alexandre Julliard
julliard at winehq.org
Thu Oct 28 16:07:44 CDT 2021
Module: wine
Branch: master
Commit: b2446501e9f785f2c6c555e28abe08c48e97e5b0
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b2446501e9f785f2c6c555e28abe08c48e97e5b0
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Thu Oct 28 10:12:31 2021 +0200
dinput8/tests: Add more HID joystick SetDataFormat tests.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dinput8/tests/hid.c | 169 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 169 insertions(+)
diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c
index b23d3a6bfd8..526e191ea41 100644
--- a/dlls/dinput8/tests/hid.c
+++ b/dlls/dinput8/tests/hid.c
@@ -3764,6 +3764,7 @@ static void test_simple_joystick(void)
.dwHeaderSize = sizeof(DIPROPHEADER),
},
};
+ DIOBJECTDATAFORMAT objdataformat[32] = {{0}};
WCHAR cwd[MAX_PATH], tempdir[MAX_PATH];
DIDEVICEOBJECTDATA objdata[32] = {{0}};
DIDEVICEOBJECTINSTANCEW objinst = {0};
@@ -4403,6 +4404,174 @@ static void test_simple_joystick(void)
check_member( state, expect_state[3], "%#x", rgbButtons[1] );
check_member( state, expect_state[3], "%#x", rgbButtons[2] );
+ hr = IDirectInputDevice8_Unacquire( device );
+ ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
+
+ dataformat.dwSize = sizeof(DIDATAFORMAT);
+ dataformat.dwObjSize = sizeof(DIOBJECTDATAFORMAT);
+ dataformat.dwFlags = DIDF_ABSAXIS;
+ dataformat.dwDataSize = sizeof(buffer);
+ dataformat.dwNumObjs = 0;
+ dataformat.rgodf = objdataformat;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+
+ dataformat.dwNumObjs = 1;
+ dataformat.dwDataSize = 8;
+ objdataformat[0].pguid = NULL;
+ objdataformat[0].dwOfs = 2;
+ objdataformat[0].dwType = DIDFT_AXIS|DIDFT_ANYINSTANCE;
+ objdataformat[0].dwFlags = 0;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ objdataformat[0].dwOfs = 4;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+ dataformat.dwDataSize = 10;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ dataformat.dwDataSize = 8;
+ objdataformat[0].dwOfs = 2;
+ objdataformat[0].dwType = DIDFT_OPTIONAL|0xff|DIDFT_ANYINSTANCE;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+
+ dataformat.dwNumObjs = 2;
+ dataformat.dwDataSize = 5;
+ objdataformat[0].pguid = NULL;
+ objdataformat[0].dwOfs = 4;
+ objdataformat[0].dwType = DIDFT_BUTTON|DIDFT_ANYINSTANCE;
+ objdataformat[0].dwFlags = 0;
+ objdataformat[1].pguid = NULL;
+ objdataformat[1].dwOfs = 0;
+ objdataformat[1].dwType = DIDFT_AXIS|DIDFT_MAKEINSTANCE( 0 );
+ objdataformat[1].dwFlags = 0;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ dataformat.dwDataSize = 8;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+
+ dataformat.dwNumObjs = 4;
+ dataformat.dwDataSize = 12;
+ objdataformat[0].pguid = NULL;
+ objdataformat[0].dwOfs = 0;
+ objdataformat[0].dwType = DIDFT_AXIS|DIDFT_MAKEINSTANCE( 0 );
+ objdataformat[0].dwFlags = 0;
+ objdataformat[1].pguid = NULL;
+ objdataformat[1].dwOfs = 0;
+ objdataformat[1].dwType = DIDFT_AXIS|DIDFT_MAKEINSTANCE( 0 );
+ objdataformat[1].dwFlags = 0;
+ objdataformat[2].pguid = &GUID_ZAxis;
+ objdataformat[2].dwOfs = 8;
+ objdataformat[2].dwType = 0xff|DIDFT_ANYINSTANCE;
+ objdataformat[2].dwFlags = 0;
+ objdataformat[3].pguid = &GUID_POV;
+ objdataformat[3].dwOfs = 0;
+ objdataformat[3].dwType = 0xff|DIDFT_ANYINSTANCE;
+ objdataformat[3].dwFlags = 0;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ objdataformat[1].dwType = DIDFT_AXIS|DIDFT_MAKEINSTANCE( 12 );
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ objdataformat[1].dwType = DIDFT_AXIS|DIDFT_MAKEINSTANCE( 0xff );
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == 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 );
+ objdataformat[1].pguid = &GUID_RzAxis;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ objdataformat[1].pguid = &GUID_Unknown;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "SetDataFormat returned: %#x\n", hr );
+ objdataformat[1].pguid = &GUID_YAxis;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+ objdataformat[1].pguid = NULL;
+ objdataformat[1].dwType = DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_MAKEINSTANCE( 0 );
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+
+ dataformat.dwNumObjs = 0;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+ hr = IDirectInputDevice8_Acquire( device );
+ ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
+
+ send_hid_input( file, &injected_input[4], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ todo_wine
+ ok( res == WAIT_TIMEOUT, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+
+ hr = IDirectInputDevice8_GetDeviceState( device, dataformat.dwDataSize, buffer );
+ ok( hr == DI_OK, "GetDeviceState returned: %#x\n", hr );
+ hr = IDirectInputDevice8_Unacquire( device );
+ ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
+
+ dataformat.dwNumObjs = 4;
+ hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+ hr = IDirectInputDevice8_Acquire( device );
+ ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
+
+ send_hid_input( file, &injected_input[4], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ todo_wine
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+ send_hid_input( file, &injected_input[3], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+
+ hr = IDirectInputDevice8_GetDeviceState( device, dataformat.dwDataSize, buffer );
+ ok( hr == DI_OK, "GetDeviceState returned: %#x\n", hr );
+ todo_wine
+ ok( ((ULONG *)buffer)[0] == 0x512b, "got %#x, expected %#x\n", ((ULONG *)buffer)[0], 0x512b );
+ ok( ((ULONG *)buffer)[1] == 0, "got %#x, expected %#x\n", ((ULONG *)buffer)[1], 0 );
+ ok( ((ULONG *)buffer)[2] == 0x7fff, "got %#x, expected %#x\n", ((ULONG *)buffer)[2], 0x7fff );
+ hr = IDirectInputDevice8_Unacquire( device );
+ ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
+
+ hr = IDirectInputDevice8_SetDataFormat( device, &c_dfDIJoystick2 );
+ ok( hr == DI_OK, "SetDataFormat returned: %#x\n", hr );
+ hr = IDirectInputDevice8_Acquire( device );
+ ok( hr == DI_OK, "Unacquire returned: %#x\n", hr );
+
+ send_hid_input( file, &injected_input[4], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+ send_hid_input( file, &injected_input[3], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+
+ hr = IDirectInputDevice8_GetDeviceState( device, sizeof(DIJOYSTATE2), &state );
+ ok( hr == DI_OK, "GetDeviceState returned: %#x\n", hr );
+ check_member( state, expect_state[3], "%d", lX );
+ check_member( state, expect_state[3], "%d", lY );
+ check_member( state, expect_state[3], "%d", lZ );
+ check_member( state, expect_state[3], "%d", lRx );
+ check_member( state, expect_state[3], "%d", rgdwPOV[0] );
+ check_member( state, expect_state[3], "%d", rgdwPOV[1] );
+ check_member( state, expect_state[3], "%#x", rgbButtons[0] );
+ check_member( state, expect_state[3], "%#x", rgbButtons[1] );
+ check_member( state, expect_state[3], "%#x", rgbButtons[2] );
+
prop_range.diph.dwHow = DIPH_DEVICE;
prop_range.diph.dwObj = 0;
prop_range.lMin = 1000;
More information about the wine-cvs
mailing list