Rémi Bernon : dinput8/tests: Add some more polled read tests.

Alexandre Julliard julliard at winehq.org
Tue Oct 12 16:12:48 CDT 2021


Module: wine
Branch: master
Commit: 12dc52cd4aeadfebe6021d0762b04eedd4c01a42
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=12dc52cd4aeadfebe6021d0762b04eedd4c01a42

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Tue Oct 12 10:33:22 2021 +0200

dinput8/tests: Add some more polled read tests.

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

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 );
     }




More information about the wine-cvs mailing list