Rémi Bernon : user32/tests: Factor GetKeyState test checks together.
Alexandre Julliard
julliard at winehq.org
Fri Apr 2 16:10:12 CDT 2021
Module: wine
Branch: master
Commit: c19cba3f0387246b5c88b89e35cdd7c7e558ebe9
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c19cba3f0387246b5c88b89e35cdd7c7e558ebe9
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Fri Apr 2 10:07:56 2021 +0200
user32/tests: Factor GetKeyState test checks together.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/input.c | 128 +++++++++++++++++++++++-----------------------
1 file changed, 63 insertions(+), 65 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
index 9d75daa0bd5..9540566867f 100644
--- a/dlls/user32/tests/input.c
+++ b/dlls/user32/tests/input.c
@@ -3739,15 +3739,48 @@ struct get_key_state_thread_params
int index;
};
+#define check_get_keyboard_state(i, c, x, todo) check_get_keyboard_state_(i, c, x, todo, __LINE__)
+static void check_get_keyboard_state_(int i, int c, int x, int todo, int line)
+{
+ unsigned char keystate[256];
+ BOOL ret;
+
+ memset(keystate, 0, sizeof(keystate));
+ ret = GetKeyboardState(keystate);
+ ok_(__FILE__, line)(ret, "GetKeyboardState failed, %u\n", GetLastError());
+ todo_wine_if(todo) ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d: expected that X keystate is %s\n", i, x ? "set" : "unset");
+ ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d: expected that C keystate is %s\n", i, c ? "set" : "unset");
+
+ /* calling it twice shouldn't change */
+ memset(keystate, 0, sizeof(keystate));
+ ret = GetKeyboardState(keystate);
+ ok_(__FILE__, line)(ret, "GetKeyboardState failed, %u\n", GetLastError());
+ todo_wine_if(todo) ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d: expected that X keystate is %s\n", i, x ? "set" : "unset");
+ ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d: expected that C keystate is %s\n", i, c ? "set" : "unset");
+}
+
+#define check_get_key_state(i, c, x, todo) check_get_key_state_(i, c, x, todo, __LINE__)
+static void check_get_key_state_(int i, int c, int x, int todo, int line)
+{
+ SHORT state;
+
+ state = GetKeyState('X');
+ todo_wine_if(todo) ok_(__FILE__, line)(!(state & 0x8000) == !x, "%d: expected that X highest bit is %s, got %#x\n", i, x ? "set" : "unset", state);
+ ok_(__FILE__, line)(!(state & 0x007e), "%d: expected that X undefined bits are unset, got %#x\n", i, state);
+
+ state = GetKeyState('C');
+ ok_(__FILE__, line)(!(state & 0x8000) == !c, "%d: expected that C highest bit is %s, got %#x\n", i, c ? "set" : "unset", state);
+ ok_(__FILE__, line)(!(state & 0x007e), "%d: expected that C undefined bits are unset, got %#x\n", i, state);
+}
+
static DWORD WINAPI get_key_state_thread(void *arg)
{
struct get_key_state_thread_params *params = arg;
struct get_key_state_test_desc* test;
HANDLE *semaphores = params->semaphores;
DWORD result;
- BYTE keystate[256];
BOOL has_queue;
- BOOL ret;
+ BOOL expect_x;
MSG msg;
int i = params->index;
@@ -3770,67 +3803,21 @@ static DWORD WINAPI get_key_state_thread(void *arg)
result = WaitForSingleObject(semaphores[1], 1000);
ok(result == WAIT_OBJECT_0, "%d: WaitForSingleObject returned %u\n", i, result);
- memset(keystate, 0, sizeof(keystate));
- ret = GetKeyboardState(keystate);
- ok(ret, "GetKeyboardState failed, %u\n", GetLastError());
- result = keystate['X'];
- todo_wine_if(!has_queue)
- ok(!result, "%d: expected that keystate is not set, got %#x\n", i, result);
-
- result = keystate['C'];
- ok(!result, "%d: expected that C keystate is not set, got %#x\n", i, result);
+ if (!has_queue) expect_x = FALSE;
+ else expect_x = TRUE;
- result = GetKeyState('X');
- if (!has_queue) todo_wine ok(!(result & 0x8000), "%d: expected that highest bit is unset, got %#x\n", i, result);
- else todo_wine ok((result & 0x8000), "%d: expected that highest bit is set, got %#x\n", i, result);
- ok(!(result & 0x007e), "%d: expected that undefined bits are unset, got %#x\n", i, result);
-
- result = GetKeyState('C');
- ok(!(result & 0x8000), "%d: expected that C highest bit is unset, got %#x\n", i, result);
- ok(!(result & 0x007e), "%d: expected that C undefined bits are unset, got %#x\n", i, result);
-
- memset(keystate, 0, sizeof(keystate));
- ret = GetKeyboardState(keystate);
- ok(ret, "GetKeyboardState failed, %u\n", GetLastError());
- result = keystate['X'];
- if (!has_queue) todo_wine ok(!result, "%d: expected that keystate is unset, got %#x\n", i, result);
- else todo_wine ok(result, "%d: expected that keystate is set, got %#x\n", i, result);
-
- result = keystate['C'];
- ok(!result, "%d: expected that C keystate is not set, got %#x\n", i, result);
+ check_get_keyboard_state(i, FALSE, FALSE, /* todo */ !has_queue);
+ check_get_key_state(i, FALSE, expect_x, /* todo */ TRUE);
+ check_get_keyboard_state(i, FALSE, expect_x, /* todo */ TRUE);
/* key released */
ReleaseSemaphore(semaphores[0], 1, NULL);
result = WaitForSingleObject(semaphores[1], 1000);
ok(result == WAIT_OBJECT_0, "%d: WaitForSingleObject returned %u\n", i, result);
- memset(keystate, 0, sizeof(keystate));
- ret = GetKeyboardState(keystate);
- ok(ret, "GetKeyboardState failed, %u\n", GetLastError());
- result = keystate['X'];
- if (!has_queue) ok(!result, "%d: expected that keystate is unset, got %#x\n", i, result);
- else todo_wine ok(result, "%d: expected that keystate is set, got %#x\n", i, result);
-
- result = keystate['C'];
- ok(!result, "%d: expected that C keystate is not set, got %#x\n", i, result);
-
- result = GetKeyState('X');
- ok(!(result & 0x8000), "%d: expected that highest bit is unset, got %#x\n", i, result);
- ok(!(result & 0x007e), "%d: expected that undefined bits are unset, got %#x\n", i, result);
-
- result = GetKeyState('C');
- ok(!(result & 0x8000), "%d: expected that C highest bit is unset, got %#x\n", i, result);
- ok(!(result & 0x007e), "%d: expected that C undefined bits are unset, got %#x\n", i, result);
-
- memset(keystate, 0, sizeof(keystate));
- ret = GetKeyboardState(keystate);
- ok(ret, "GetKeyboardState failed, %u\n", GetLastError());
- result = keystate['X'];
- if (!has_queue) ok(!result || broken(result) /* w2008 */, "%d: expected that keystate is unset, got %#x\n", i, result);
- else todo_wine ok(result || broken(!result) /* w2008 */, "%d: expected that keystate is set, got %#x\n", i, result);
-
- result = keystate['C'];
- ok(!result, "%d: expected that C keystate is not set, got %#x\n", i, result);
+ check_get_keyboard_state(i, FALSE, expect_x, /* todo */ has_queue);
+ check_get_key_state(i, FALSE, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, FALSE, FALSE, /* todo */ FALSE);
return 0;
}
@@ -3841,6 +3828,7 @@ static void test_GetKeyState(void)
HANDLE thread;
DWORD result;
BYTE keystate[256];
+ BOOL expect_x;
HWND hwnd;
MSG msg;
int i;
@@ -3888,13 +3876,19 @@ static void test_GetKeyState(void)
keybd_event('X', 0, 0, 0);
keystate['C'] = 0xff;
SetKeyboardState(keystate);
+
+ check_get_keyboard_state(i, TRUE, FALSE, /* todo */ FALSE);
+ check_get_key_state(i, TRUE, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, TRUE, FALSE, /* todo */ FALSE);
+
if (test->peek_message_main) while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
- result = GetKeyState('C');
- ok((result & 0x8000), "%d: expected that highest bit is set, got %#x\n", i, result);
- result = GetKeyState('X');
- if (test->peek_message_main) ok((result & 0x8000), "%d: expected that highest bit is set, got %#x\n", i, result);
- else ok(!(result & 0x8000), "%d: expected that highest bit is unset, got %#x\n", i, result);
+ if (test->peek_message_main) expect_x = TRUE;
+ else expect_x = FALSE;
+
+ check_get_keyboard_state(i, TRUE, expect_x, /* todo */ FALSE);
+ check_get_key_state(i, TRUE, expect_x, /* todo */ FALSE);
+ check_get_keyboard_state(i, TRUE, expect_x, /* todo */ FALSE);
ReleaseSemaphore(params.semaphores[1], 1, NULL);
@@ -3905,12 +3899,16 @@ static void test_GetKeyState(void)
keybd_event('X', 0, KEYEVENTF_KEYUP, 0);
keystate['C'] = 0x00;
SetKeyboardState(keystate);
+
+ check_get_keyboard_state(i, FALSE, FALSE, /* todo */ FALSE);
+ check_get_key_state(i, FALSE, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, FALSE, FALSE, /* todo */ FALSE);
+
if (test->peek_message_main) while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
- result = GetKeyState('C');
- ok(!(result & 0x8000), "%d: expected that highest bit is unset, got %#x\n", i, result);
- result = GetKeyState('X');
- ok(!(result & 0x8000), "%d: expected that highest bit is unset, got %#x\n", i, result);
+ check_get_keyboard_state(i, FALSE, FALSE, /* todo */ FALSE);
+ check_get_key_state(i, FALSE, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, FALSE, FALSE, /* todo */ FALSE);
ReleaseSemaphore(params.semaphores[1], 1, NULL);
More information about the wine-cvs
mailing list