Alexandre Julliard : user32/tests: Don' t display window info for hooks that don't contain a window.
Alexandre Julliard
julliard at winehq.org
Thu Jan 22 08:41:28 CST 2009
Module: wine
Branch: master
Commit: e280bf6644cdc601ec711236e614206909ec6fb0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e280bf6644cdc601ec711236e614206909ec6fb0
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jan 22 13:12:09 2009 +0100
user32/tests: Don't display window info for hooks that don't contain a window.
Ignore some more registered messages.
Fix some other failures on Win2k.
---
dlls/user32/tests/win.c | 93 ++++++++++++++++++++++++++++-------------------
1 files changed, 56 insertions(+), 37 deletions(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 605d7c5..8ec8a61 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -78,7 +78,7 @@ static void flush_events( BOOL remove_messages )
{
MSG msg;
int diff = 200;
- int min_timeout = 50;
+ int min_timeout = 100;
DWORD time = GetTickCount() + diff;
while (diff > 0)
@@ -87,7 +87,7 @@ static void flush_events( BOOL remove_messages )
if (remove_messages)
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
diff = time - GetTickCount();
- min_timeout = 10;
+ min_timeout = 50;
}
}
@@ -853,10 +853,17 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
trace("CBT: %d (%s), %08lx, %08lx\n", nCode, code_name, wParam, lParam);
- /* on HCBT_DESTROYWND window state is undefined */
- if (nCode != HCBT_DESTROYWND && IsWindow((HWND)wParam))
+ switch (nCode)
{
- if (pGetWindowInfo)
+ /* on HCBT_DESTROYWND window state is undefined */
+ case HCBT_DESTROYWND:
+ break;
+ case HCBT_MOVESIZE:
+ case HCBT_MINMAX:
+ case HCBT_CREATEWND:
+ case HCBT_ACTIVATE:
+ case HCBT_SETFOCUS:
+ if (pGetWindowInfo && IsWindow((HWND)wParam))
{
WINDOWINFO info;
@@ -868,6 +875,7 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
ok(pGetWindowInfo((HWND)wParam, &info), "GetWindowInfo should not fail\n");
verify_window_info((HWND)wParam, &info);
}
+ break;
}
switch (nCode)
@@ -2662,6 +2670,24 @@ static void test_keyboard_input(HWND hwnd)
ok( !ret, "message %04x available\n", msg.message);
}
+static BOOL wait_for_message( MSG *msg )
+{
+ BOOL ret;
+
+ for (;;)
+ {
+ ret = PeekMessageA(msg, 0, 0, 0, PM_REMOVE);
+ if (ret)
+ {
+ if (msg->message == WM_PAINT) DispatchMessage(msg);
+ else if (msg->message < 0xc000) break; /* skip registered messages */
+ }
+ else if (MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT ) == WAIT_TIMEOUT) break;
+ }
+ if (!ret) msg->message = 0;
+ return ret;
+}
+
static void test_mouse_input(HWND hwnd)
{
RECT rc;
@@ -2674,6 +2700,7 @@ static void test_mouse_input(HWND hwnd)
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
+ SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
GetWindowRect(hwnd, &rc);
trace("main window %p: (%d,%d)-(%d,%d)\n", hwnd, rc.left, rc.top, rc.right, rc.bottom);
@@ -2684,6 +2711,7 @@ static void test_mouse_input(HWND hwnd)
assert(popup != 0);
ShowWindow(popup, SW_SHOW);
UpdateWindow(popup);
+ SetWindowPos( popup, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
GetWindowRect(popup, &rc);
trace("popup window %p: (%d,%d)-(%d,%d)\n", popup, rc.left, rc.top, rc.right, rc.bottom);
@@ -2720,6 +2748,7 @@ static void test_mouse_input(HWND hwnd)
msg.message = 0;
mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
+ flush_events( FALSE );
/* FIXME: SetCursorPos in Wine generates additional WM_MOUSEMOVE message */
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
{
@@ -2732,17 +2761,14 @@ static void test_mouse_input(HWND hwnd)
mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0);
ShowWindow(popup, SW_HIDE);
- do
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
- while (msg.message >= 0xc000); /* skip registered messages */
- ok(msg.hwnd == hwnd && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+ ret = wait_for_message( &msg );
+ if (ret)
+ ok(msg.hwnd == hwnd && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message);
flush_events( TRUE );
mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
ShowWindow(hwnd, SW_HIDE);
- do
- ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
- while (ret && msg.message >= 0xc000); /* skip registered messages */
+ ret = wait_for_message( &msg );
ok( !ret, "message %04x available\n", msg.message);
flush_events( TRUE );
@@ -2758,31 +2784,23 @@ static void test_mouse_input(HWND hwnd)
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
@@ -2797,10 +2815,12 @@ static void test_mouse_input(HWND hwnd)
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
msg.hwnd, hwnd, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
msg.hwnd, hwnd, msg.message);
@@ -2808,9 +2828,8 @@ static void test_mouse_input(HWND hwnd)
SendMessageA(hwnd, WM_COMMAND, (WPARAM)popup, 0);
test_lbuttondown_flag = FALSE;
- do
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
- while (msg.message >= 0xc000); /* skip registered messages */
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
@@ -4892,8 +4911,8 @@ static void test_hwnd_message(void)
ok(parent != desktop, "GetAncestor(GA_PARENT) should not return desktop for message windows\n");
root = pGetAncestor(hwnd, GA_ROOT);
ok(root == hwnd, "GetAncestor(GA_ROOT) should return hwnd for message windows\n");
- ok( !pGetAncestor(parent, GA_PARENT), "parent shouldn't have parent %p\n",
- pGetAncestor(parent, GA_PARENT) );
+ ok( !pGetAncestor(parent, GA_PARENT) || broken(pGetAncestor(parent, GA_PARENT) != 0), /* win2k */
+ "parent shouldn't have parent %p\n", pGetAncestor(parent, GA_PARENT) );
trace("parent %p root %p desktop %p\n", parent, root, desktop);
if (!GetClassNameA( parent, buffer, sizeof(buffer) )) buffer[0] = 0;
ok( !lstrcmpi( buffer, "Message" ), "wrong parent class '%s'\n", buffer );
@@ -5521,7 +5540,7 @@ START_TEST(win)
if (!RegisterWindowClasses()) assert(0);
hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId());
- assert(hhook);
+ if (!hhook) win_skip( "Cannot set CBT hook, skipping some tests\n" );
hwndMain = CreateWindowExA(/*WS_EX_TOOLWINDOW*/ 0, "MainWindowClass", "Main window",
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX |
@@ -5588,7 +5607,7 @@ START_TEST(win)
test_handles( hwndMain );
/* add the tests above this line */
- UnhookWindowsHookEx(hhook);
+ if (hhook) UnhookWindowsHookEx(hhook);
DestroyWindow(hwndMain2);
DestroyWindow(hwndMain);
More information about the wine-cvs
mailing list