Rémi Bernon : dinput8/tests: Add some HID joystick IDirectInputDevice8_GetDeviceData tests.
Alexandre Julliard
julliard at winehq.org
Fri Sep 17 16:03:08 CDT 2021
Module: wine
Branch: master
Commit: 878dff8dae3b2d00fd05f1777836686e24158d2a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=878dff8dae3b2d00fd05f1777836686e24158d2a
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Fri Sep 17 09:06:25 2021 +0200
dinput8/tests: Add some HID joystick IDirectInputDevice8_GetDeviceData 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 | 128 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 128 insertions(+)
diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c
index 15e2c838a23..166ca805937 100644
--- a/dlls/dinput8/tests/hid.c
+++ b/dlls/dinput8/tests/hid.c
@@ -3378,6 +3378,23 @@ static void test_simple_joystick(void)
{.lX = 0, .lY = 0, .rgdwPOV = {-1, -1, -1, -1}, .rgbButtons = {0x80, 0x80}},
{.lX = 32767, .lY = 5594, .rgdwPOV = {13500, -1, -1, -1}, .rgbButtons = {0x80}},
};
+ static const DIDEVICEOBJECTDATA expect_objdata[] =
+ {
+ {.dwOfs = 0x4, .dwData = 0xffff, .dwSequence = 0xa},
+ {.dwOfs = 0x4, .dwData = 0xffff, .dwSequence = 0xa},
+ {.dwOfs = 0, .dwData = 0xffff, .dwSequence = 0xa},
+ {.dwOfs = 0x20, .dwData = 31500, .dwSequence = 0xa},
+ {.dwOfs = 0x30, .dwData = 0x80, .dwSequence = 0xa},
+ {.dwOfs = 0x4, .dwData = 0x512b, .dwSequence = 0xd},
+ {.dwOfs = 0, .dwData = 0x512b, .dwSequence = 0xd},
+ {.dwOfs = 0x20, .dwData = -1, .dwSequence = 0xd},
+ {.dwOfs = 0x30, .dwData = 0, .dwSequence = 0xd},
+ {.dwOfs = 0x31, .dwData = 0, .dwSequence = 0xd},
+ {.dwOfs = 0x4, .dwData = 0, .dwSequence = 0xf},
+ {.dwOfs = 0, .dwData = 0, .dwSequence = 0xf},
+ {.dwOfs = 0x30, .dwData = 0x80, .dwSequence = 0xf},
+ {.dwOfs = 0x31, .dwData = 0x80, .dwSequence = 0xf},
+ };
const DIDEVICEINSTANCEW expect_devinst =
{
@@ -3437,6 +3454,7 @@ static void test_simple_joystick(void)
},
};
WCHAR cwd[MAX_PATH], tempdir[MAX_PATH];
+ DIDEVICEOBJECTDATA objdata[32] = {{0}};
DIDEVICEINSTANCEW devinst = {0};
DIDATAFORMAT dataformat = {0};
IDirectInputDevice8W *device;
@@ -3838,6 +3856,116 @@ static void test_simple_joystick(void)
check_member( state, expect_state[i], "%#x", rgbButtons[2] );
winetest_pop_context();
+ res = 1;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA) - 1, objdata, &res, DIGDD_PEEK );
+ todo_wine
+ ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_GetDeviceData returned %#x\n", hr );
+ res = 1;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK );
+ ok( hr == DIERR_NOTBUFFERED, "IDirectInputDevice8_GetDeviceData returned %#x\n", hr );
+
+ hr = IDirectInputDevice8_Unacquire( device );
+ ok( hr == DI_OK, "IDirectInputDevice8_Unacquire returned: %#x\n", hr );
+ prop_dword.diph.dwHow = DIPH_DEVICE;
+ prop_dword.diph.dwObj = 0;
+ prop_dword.dwData = 1;
+ hr = IDirectInputDevice8_SetProperty( device, DIPROP_BUFFERSIZE, &prop_dword.diph );
+ ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_BUFFERSIZE returned %#x\n", hr );
+ hr = IDirectInputDevice8_Acquire( device );
+ ok( hr == DI_OK, "IDirectInputDevice8_Unacquire returned: %#x\n", hr );
+
+ res = 1;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK );
+ ok( hr == DI_OK, "IDirectInputDevice8_GetDeviceData returned %#x\n", hr );
+ ok( res == 0, "got %u expected %u\n", res, 0 );
+
+ send_hid_input( file, &injected_input[0], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+
+ res = 1;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK );
+ ok( hr == DI_BUFFEROVERFLOW, "IDirectInputDevice8_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
+ ok( hr == DI_OK, "IDirectInputDevice8_GetDeviceData returned %#x\n", hr );
+ ok( res == 0, "got %u expected %u\n", res, 0 );
+
+ hr = IDirectInputDevice8_Unacquire( device );
+ ok( hr == DI_OK, "IDirectInputDevice8_Unacquire returned: %#x\n", hr );
+ prop_dword.diph.dwHow = DIPH_DEVICE;
+ prop_dword.diph.dwObj = 0;
+ prop_dword.dwData = 10;
+ hr = IDirectInputDevice8_SetProperty( device, DIPROP_BUFFERSIZE, &prop_dword.diph );
+ ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_BUFFERSIZE returned %#x\n", hr );
+ hr = IDirectInputDevice8_Acquire( device );
+ ok( hr == DI_OK, "IDirectInputDevice8_Unacquire returned: %#x\n", hr );
+
+ send_hid_input( file, &injected_input[1], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+
+ res = 1;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, DIGDD_PEEK );
+ ok( hr == DI_OK, "IDirectInputDevice8_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 );
+ todo_wine
+ check_member( objdata[0], expect_objdata[0], "%#x", dwSequence );
+ ok( objdata[0].uAppData == -1, "got %p, expected %p\n", (void *)objdata[0].uAppData, (void *)-1 );
+ res = 4;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 );
+ ok( hr == DI_OK, "IDirectInputDevice8_GetDeviceData returned %#x\n", hr );
+ ok( res == 4, "got %u expected %u\n", res, 4 );
+ for (i = 0; i < 4; ++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 );
+ todo_wine
+ check_member( objdata[i], expect_objdata[1 + i], "%#x", dwSequence );
+ ok( objdata[i].uAppData == -1, "got %p, expected %p\n", (void *)objdata[i].uAppData, (void *)-1 );
+ winetest_pop_context();
+ }
+
+ send_hid_input( file, &injected_input[2], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+ send_hid_input( file, &injected_input[4], sizeof(*injected_input) );
+ res = WaitForSingleObject( event, 100 );
+ ok( res == WAIT_OBJECT_0, "WaitForSingleObject failed\n" );
+ ResetEvent( event );
+
+ res = 1;
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 );
+ ok( hr == DI_BUFFEROVERFLOW, "IDirectInputDevice8_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 );
+ res = ARRAY_SIZE(objdata);
+ hr = IDirectInputDevice8_GetDeviceData( device, sizeof(DIDEVICEOBJECTDATA), objdata, &res, 0 );
+ ok( hr == DI_OK, "IDirectInputDevice8_GetDeviceData returned %#x\n", hr );
+ ok( res == 8, "got %u expected %u\n", res, 8 );
+ for (i = 0; i < 8; ++i)
+ {
+ winetest_push_context( "objdata[%d]", i );
+ todo_wine
+ check_member( objdata[i], expect_objdata[6 + i], "%#x", dwOfs );
+ todo_wine_if( i != 3 && i != 4 && i != 7 )
+ 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 );
+ winetest_pop_context();
+ }
+
hr = IDirectInputDevice8_Unacquire( device );
ok( hr == DI_OK, "IDirectInputDevice8_Unacquire returned: %#x\n", hr );
More information about the wine-cvs
mailing list