[PATCH 1/3] dinput8/tests: Add some more polled read tests.

Rémi Bernon rbernon at codeweavers.com
Tue Oct 12 03:33:22 CDT 2021


Showing that we should probably not queue reports in this mode.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/dinput8/tests/hid.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c
index cdb19808fcd..7f933df3b06 100644
--- a/dlls/dinput8/tests/hid.c
+++ b/dlls/dinput8/tests/hid.c
@@ -2174,6 +2174,40 @@ static void test_hidp( HANDLE file, HANDLE async_file, int report_id, BOOL polle
             "expected different report\n" );
         ok( !memcmp( report, buffer, caps.InputReportByteLength ), "expected identical reports\n" );
 
+        value = 10;
+        SetLastError( 0xdeadbeef );
+        ret = sync_ioctl( file, IOCTL_HID_SET_POLL_FREQUENCY_MSEC, &value, sizeof(ULONG), NULL, NULL );
+        ok( ret, "IOCTL_HID_SET_POLL_FREQUENCY_MSEC failed last error %u\n", GetLastError() );
+
+        Sleep( 600 );
+
+        SetLastError( 0xdeadbeef );
+        ret = ReadFile( async_file, report, caps.InputReportByteLength, NULL, &overlapped );
+        todo_wine
+        ok( !ret, "ReadFile succeeded\n" );
+        todo_wine
+        ok( GetLastError() == ERROR_IO_PENDING, "ReadFile returned error %u\n", GetLastError() );
+
+        SetLastError( 0xdeadbeef );
+        ret = ReadFile( async_file, buffer, caps.InputReportByteLength, NULL, &overlapped2 );
+        todo_wine
+        ok( !ret, "ReadFile succeeded\n" );
+        todo_wine
+        ok( GetLastError() == ERROR_IO_PENDING, "ReadFile returned error %u\n", GetLastError() );
+
+        /* wait for second report to be ready */
+        ret = GetOverlappedResult( async_file, &overlapped2, &value, TRUE );
+        ok( ret, "GetOverlappedResult failed, last error %u\n", GetLastError() );
+        ok( value == (report_id ? 3 : 4), "GetOverlappedResult returned length %u, expected %u\n",
+            value, (report_id ? 3 : 4) );
+        /* first report should be ready and the same */
+        ret = GetOverlappedResult( async_file, &overlapped, &value, FALSE );
+        ok( ret, "GetOverlappedResult failed, last error %u\n", GetLastError() );
+        ok( value == (report_id ? 3 : 4), "GetOverlappedResult returned length %u, expected %u\n",
+            value, (report_id ? 3 : 4) );
+        todo_wine
+        ok( !memcmp( report, buffer, caps.InputReportByteLength ), "expected identical reports\n" );
+
         CloseHandle( overlapped.hEvent );
         CloseHandle( overlapped2.hEvent );
     }
-- 
2.33.0




More information about the wine-devel mailing list