Make user32/win.c tests pass on Win9x and NT platforms
Dmitry Timoshkov
dmitry at codeweavers.com
Thu Sep 23 02:19:18 CDT 2004
Hello,
Changelog:
Dmitry Timoshkov <dmitry at codeweavers.com>
- Skip shell window test on Win9x and restore its functionality
on NT platforms.
- Use keybd_event instead of SendInput in order to perform keyboard
input test on Win95 as well.
--- cvs/wine/dlls/user/tests/win.c Thu Sep 16 23:23:10 2004
+++ wine/dlls/user/tests/win.c Thu Sep 23 07:04:03 2004
@@ -797,7 +797,7 @@ static LRESULT CALLBACK cbt_hook_proc(in
return CallNextHookEx(hhook, nCode, wParam, lParam);
}
-static void test_shell_window()
+static void test_shell_window(void)
{
BOOL ret;
DWORD error;
@@ -807,6 +807,12 @@ static void test_shell_window()
HWND hwnd1, hwnd2, hwnd3, hwnd4, hwnd5;
HWND shellWindow, nextWnd;
+ if (!GetWindowLongW(GetDesktopWindow(), GWL_STYLE))
+ {
+ trace("Skipping shell window test on Win9x\n");
+ return;
+ }
+
shellWindow = GetShellWindow();
hinst = GetModuleHandle(0);
hUser32 = GetModuleHandleA("user32");
@@ -817,12 +823,23 @@ static void test_shell_window()
trace("previous shell window: %p\n", shellWindow);
if (shellWindow) {
+ DWORD pid;
+ HANDLE hProcess;
+
ret = DestroyWindow(shellWindow);
error = GetLastError();
ok(!ret, "DestroyWindow(shellWindow)\n");
- /* passes on Win XP, but not on Win98
- ok(error==ERROR_ACCESS_DENIED, "ERROR_ACCESS_DENIED after DestroyWindow(shellWindow)\n"); */
+ /* passes on Win XP, but not on Win98 */
+ ok(error==ERROR_ACCESS_DENIED, "ERROR_ACCESS_DENIED after DestroyWindow(shellWindow)\n");
+
+ /* close old shell instance */
+ GetWindowThreadProcessId(shellWindow, &pid);
+ hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
+ ret = TerminateProcess(hProcess, 0);
+ ok(ret, "termination of previous shell process failed: GetLastError()=%ld\n", GetLastError());
+ WaitForSingleObject(hProcess, INFINITE); /* wait for termination */
+ CloseHandle(hProcess);
}
hwnd1 = CreateWindowEx(0, TEXT("#32770"), TEXT("TEST1"), WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/, 100, 100, 300, 200, 0, 0, hinst, 0);
@@ -1988,15 +2005,6 @@ static void test_capture_3(HWND hwnd1, H
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);
@@ -2022,13 +2030,10 @@ static void test_keyboard_input(HWND hwn
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);
- }
+ keybd_event(VK_SPACE, 0, 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);
SetFocus(0);
ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus());
@@ -2049,13 +2054,10 @@ static void test_keyboard_input(HWND hwn
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);
- }
+ keybd_event(VK_SPACE, 0, 0, 0);
+ 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)
More information about the wine-patches
mailing list