Zebediah Figura : quartz/tests: Avoid testing the result of GetQueueStatus().
Module: wine Branch: master Commit: 44472fae6baf86f1c66725e02720b251fdf1bbd4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=44472fae6baf86f1c66725e02... Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Mon May 17 10:49:12 2021 -0500 quartz/tests: Avoid testing the result of GetQueueStatus(). It's very unreliable; our window can receive messages not related to the ones we're trying to test. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/quartz/tests/videorenderer.c | 44 +++++++++++++++++++++++++++------------ dlls/quartz/tests/vmr7.c | 44 +++++++++++++++++++++++++++------------ dlls/quartz/tests/vmr9.c | 44 +++++++++++++++++++++++++++------------ 3 files changed, 93 insertions(+), 39 deletions(-) diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index f4d9660316c..797ea7acc7c 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -2109,37 +2109,55 @@ static void test_video_window_messages(IVideoWindow *window, HWND hwnd, HWND our flush_events(); + /* Demonstrate that messages should be sent, not posted, and that only some + * messages should be forwarded. A previous implementation unconditionally + * posted all messages. */ + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SYSCOLORCHANGE, 0, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } - hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SETCURSOR, - (WPARAM)hwnd, MAKELONG(HTCLIENT, WM_MOUSEMOVE)); + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_FONTCHANGE, 0, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_FONTCHANGE, "WM_FONTCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } params.window = window; params.hwnd = our_hwnd; params.message = WM_SYSCOLORCHANGE; thread = CreateThread(NULL, 0, notify_message_proc, ¶ms, 0, NULL); ok(WaitForSingleObject(thread, 100) == WAIT_TIMEOUT, "Thread should block.\n"); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(ret == ((QS_SENDMESSAGE << 16) | QS_SENDMESSAGE), "Got unexpected status %#x.\n", ret); - while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - ok(!WaitForSingleObject(thread, 1000), "Wait timed out.\n"); + while ((ret = MsgWaitForMultipleObjects(1, &thread, FALSE, 1000, QS_ALLINPUT)) == 1) + { + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } + } + ok(!ret, "Wait timed out.\n"); CloseHandle(thread); - params.message = WM_SETCURSOR; + params.message = WM_FONTCHANGE; thread = CreateThread(NULL, 0, notify_message_proc, ¶ms, 0, NULL); ok(!WaitForSingleObject(thread, 1000), "Thread should not block.\n"); CloseHandle(thread); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_FONTCHANGE, "WM_FONTCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } hr = IVideoWindow_put_Owner(window, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c index 212ce213e89..02b5a626d74 100644 --- a/dlls/quartz/tests/vmr7.c +++ b/dlls/quartz/tests/vmr7.c @@ -2094,37 +2094,55 @@ static void test_video_window_messages(IVideoWindow *window, HWND hwnd, HWND our flush_events(); + /* Demonstrate that messages should be sent, not posted, and that only some + * messages should be forwarded. A previous implementation unconditionally + * posted all messages. */ + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SYSCOLORCHANGE, 0, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } - hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SETCURSOR, - (WPARAM)hwnd, MAKELONG(HTCLIENT, WM_MOUSEMOVE)); + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_FONTCHANGE, 0, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_FONTCHANGE, "WM_FONTCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } params.window = window; params.hwnd = our_hwnd; params.message = WM_SYSCOLORCHANGE; thread = CreateThread(NULL, 0, notify_message_proc, ¶ms, 0, NULL); ok(WaitForSingleObject(thread, 100) == WAIT_TIMEOUT, "Thread should block.\n"); - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 1000, QS_SENDMESSAGE); - ok(!ret, "Did not find a sent message.\n"); - while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - ok(!WaitForSingleObject(thread, 1000), "Wait timed out.\n"); + while ((ret = MsgWaitForMultipleObjects(1, &thread, FALSE, 1000, QS_ALLINPUT)) == 1) + { + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } + } + ok(!ret, "Wait timed out.\n"); CloseHandle(thread); - params.message = WM_SETCURSOR; + params.message = WM_FONTCHANGE; thread = CreateThread(NULL, 0, notify_message_proc, ¶ms, 0, NULL); ok(!WaitForSingleObject(thread, 1000), "Thread should not block.\n"); CloseHandle(thread); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_FONTCHANGE, "WM_FONTCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } hr = IVideoWindow_put_Owner(window, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c index 44b9a453305..1697a321915 100644 --- a/dlls/quartz/tests/vmr9.c +++ b/dlls/quartz/tests/vmr9.c @@ -2333,37 +2333,55 @@ static void test_video_window_messages(IVideoWindow *window, HWND hwnd, HWND our flush_events(); + /* Demonstrate that messages should be sent, not posted, and that only some + * messages should be forwarded. A previous implementation unconditionally + * posted all messages. */ + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SYSCOLORCHANGE, 0, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } - hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SETCURSOR, - (WPARAM)hwnd, MAKELONG(HTCLIENT, WM_MOUSEMOVE)); + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_FONTCHANGE, 0, 0); ok(hr == S_OK, "Got hr %#x.\n", hr); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_FONTCHANGE, "WM_FONTCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } params.window = window; params.hwnd = our_hwnd; params.message = WM_SYSCOLORCHANGE; thread = CreateThread(NULL, 0, notify_message_proc, ¶ms, 0, NULL); ok(WaitForSingleObject(thread, 100) == WAIT_TIMEOUT, "Thread should block.\n"); - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 1000, QS_SENDMESSAGE); - ok(!ret, "Did not find a sent message.\n"); - while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - ok(!WaitForSingleObject(thread, 1000), "Wait timed out.\n"); + while ((ret = MsgWaitForMultipleObjects(1, &thread, FALSE, 1000, QS_ALLINPUT)) == 1) + { + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } + } + ok(!ret, "Wait timed out.\n"); CloseHandle(thread); - params.message = WM_SETCURSOR; + params.message = WM_FONTCHANGE; thread = CreateThread(NULL, 0, notify_message_proc, ¶ms, 0, NULL); ok(!WaitForSingleObject(thread, 1000), "Thread should not block.\n"); CloseHandle(thread); - ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); - ok(!ret, "Got unexpected status %#x.\n", ret); + + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + { + ok(msg.message != WM_FONTCHANGE, "WM_FONTCHANGE should not be posted.\n"); + DispatchMessageA(&msg); + } hr = IVideoWindow_put_Owner(window, 0); ok(hr == S_OK, "Got hr %#x.\n", hr);
participants (1)
-
Alexandre Julliard