[PATCH 3/3] dinput8/tests: Make keyboard event tests more robust.

Arkadiusz Hiler ahiler at codeweavers.com
Tue Aug 3 05:59:27 CDT 2021


On Windows dinput sometimes ignores injected input events.

Signed-off-by: Arkadiusz Hiler <ahiler at codeweavers.com>
---
 dlls/dinput8/tests/device.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c
index 7d6f8442085..56aa7b353aa 100644
--- a/dlls/dinput8/tests/device.c
+++ b/dlls/dinput8/tests/device.c
@@ -869,11 +869,16 @@ static void test_keyboard_events(void)
     data_size = ARRAY_SIZE(obj_data);
     hr = IDirectInputDevice8_GetDeviceData(di_keyboard, sizeof(DIDEVICEOBJECTDATA), obj_data, &data_size, 0);
     ok(SUCCEEDED(hr), "Failed to get data hr=%08x\n", hr);
-    ok(data_size == 1, "Expected 1 element, received %d\n", data_size);
-
-    hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(kbdata), kbdata);
-    ok(SUCCEEDED(hr), "IDirectInputDevice8_GetDeviceState failed: %08x\n", hr);
-    ok(kbdata[DIK_SPACE], "Expected DIK_SPACE key state down\n");
+    if (data_size != 1)
+    {
+        win_skip("We're not able to inject input into Windows dinput8 with events\n");
+    }
+    else
+    {
+        hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(kbdata), kbdata);
+        ok(SUCCEEDED(hr), "IDirectInputDevice8_GetDeviceState failed: %08x\n", hr);
+        ok(kbdata[DIK_SPACE], "Expected DIK_SPACE key state down\n");
+    }
 
     keybd_event(VK_SPACE, DIK_SPACE, KEYEVENTF_KEYUP, 0);
     flush_events();
@@ -881,7 +886,8 @@ static void test_keyboard_events(void)
     data_size = ARRAY_SIZE(obj_data);
     hr = IDirectInputDevice8_GetDeviceData(di_keyboard, sizeof(DIDEVICEOBJECTDATA), obj_data, &data_size, 0);
     ok(SUCCEEDED(hr), "Failed to get data hr=%08x\n", hr);
-    ok(data_size == 1, "Expected 1 element, received %d\n", data_size);
+    if (data_size != 1)
+        win_skip("We're not able to inject input into Windows dinput8 with events\n");
 
     /* Test injecting keyboard events with scancode=0.
      * Windows DInput ignores the VK, sets scancode 0 to be pressed, and GetDeviceData returns no elements. */
@@ -895,8 +901,10 @@ static void test_keyboard_events(void)
 
     hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(kbdata), kbdata);
     ok(SUCCEEDED(hr), "IDirectInputDevice8_GetDeviceState failed: %08x\n", hr);
-    todo_wine
-    ok(kbdata[0], "Expected key 0 state down\n");
+    if (!strcmp(winetest_platform, "windows") && !kbdata[0])
+        skip("We're not able to inject input into Windows dinput8 with events\n");
+    else
+        todo_wine ok(kbdata[0], "Expected key 0 state down\n");
 
     keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
     flush_events();
-- 
2.32.0




More information about the wine-devel mailing list