Add a test case for WM_KEY* to WM_SYSKEY* message conversion

Dmitry Timoshkov dmitry at baikal.ru
Thu Sep 16 05:55:31 CDT 2004


Hello,

this test confirms that current behaviour in Wine regarding conversion
of WM_KEY* to WM_SYSKEY* messages is correct.

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Add a test case for WM_KEY* to WM_SYSKEY* message conversion.

--- cvs/hq/wine/dlls/user/tests/win.c	2004-08-27 18:18:54.000000000 +0900
+++ wine/dlls/user/tests/win.c	2004-09-16 19:12:52.000000000 +0900
@@ -23,6 +23,9 @@
 /* To get ICON_SMALL2 with the MSVC headers */
 #define _WIN32_WINNT 0x0501
 
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
 #include <assert.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1590,16 +1593,22 @@ static void test_icons(void)
 
 static void test_SetWindowPos(HWND hwnd)
 {
+    RECT orig_win_rc;
     BOOL is_win9x = GetWindowLongW(hwnd, GWL_WNDPROC) == 0;
 
     /* Win9x truncates coordinates to 16-bit irrespectively */
     if (is_win9x) return;
 
+    GetWindowRect(hwnd, &orig_win_rc);
+
     SetWindowPos(hwnd, 0, -32769, -40000, -32769, -90000, SWP_NOMOVE);
     SetWindowPos(hwnd, 0, 32768, 40000, 32768, 40000, SWP_NOMOVE);
 
     SetWindowPos(hwnd, 0, -32769, -40000, -32769, -90000, SWP_NOSIZE);
     SetWindowPos(hwnd, 0, 32768, 40000, 32768, 40000, SWP_NOSIZE);
+
+    SetWindowPos(hwnd, 0, orig_win_rc.left, orig_win_rc.top,
+                 orig_win_rc.right, orig_win_rc.bottom, 0);
 }
 
 static void test_SetMenu(HWND parent)
@@ -1972,6 +1981,81 @@ static void test_capture_3(HWND hwnd1, H
 
     ShowWindow(hwnd1, SW_SHOW);
     check_wnd_state(hwnd1, hwnd1, hwnd1, hwnd2);
+
+    ReleaseCapture();
+}
+
+static void test_keyboard_input(HWND hwnd)
+{
+    MSG msg;
+    INPUT input;
+    FARPROC pSendInput = GetProcAddress(GetModuleHandleA("user32.dll"), "SendInput");
+
+    input.type = INPUT_KEYBOARD;
+    input.u.ki.wVk = VK_SPACE;
+    input.u.ki.wScan = 0;
+    input.u.ki.dwFlags = 0;
+    input.u.ki.time = 0;
+    input.u.ki.dwExtraInfo = 0;
+
+    ShowWindow(hwnd, SW_SHOW);
+    UpdateWindow(hwnd);
+
+    ok(GetActiveWindow() == hwnd, "wrong active window %p\n", GetActiveWindow());
+
+    SetFocus(hwnd);
+    ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
+
+    while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
+
+    PostMessageA(hwnd, WM_KEYDOWN, 0, 0);
+    ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+    ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+    ok(!PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "message %04x available\n", msg.message);
+
+    ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
+
+    PostThreadMessageA(GetCurrentThreadId(), WM_KEYDOWN, 0, 0);
+    ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+    ok(!msg.hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+    ok(!PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "message %04x available\n", msg.message);
+
+    ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
+
+    if (pSendInput)
+    {
+	ok(pSendInput(1, &input, sizeof(input)) == 1, "SendInput failed\n");
+	ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+	ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+	ok(!PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "message %04x available\n", msg.message);
+    }
+
+    SetFocus(0);
+    ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus());
+
+    while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
+
+    PostMessageA(hwnd, WM_KEYDOWN, 0, 0);
+    ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+    ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+    ok(!PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "message %04x available\n", msg.message);
+
+    ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus());
+
+    PostThreadMessageA(GetCurrentThreadId(), WM_KEYDOWN, 0, 0);
+    ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+    ok(!msg.hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+    ok(!PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "message %04x available\n", msg.message);
+
+    ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus());
+
+    if (pSendInput)
+    {
+	ok(pSendInput(1, &input, sizeof(input)) == 1, "SendInput failed\n");
+	ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+	ok(msg.hwnd == hwnd && msg.message == WM_SYSKEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+	ok(!PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "message %04x available\n", msg.message);
+    }
 }
 
 START_TEST(win)
@@ -2027,6 +2111,7 @@ START_TEST(win)
     test_SetActiveWindow(hwndMain);
 
     test_children_zorder(hwndMain);
+    test_keyboard_input(hwndMain);
 
     UnhookWindowsHookEx(hhook);
 }






More information about the wine-patches mailing list