From: Zhiyi Zhang zzhang@codeweavers.com
The tests are mainly to show that SendMessageCallbackA/W() with NULL callback pointer and callback data being 1 causes message to be posted to window, even when the window is created in the same thread. --- dlls/user32/tests/msg.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 80d900baa1c..1c2d61c7781 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -16499,6 +16499,12 @@ static void test_EndDialog(void) UnregisterClassA(cls.lpszClassName, cls.hInstance); }
+static const struct message WmUserSeq[] = +{ + { WM_USER, sent }, + { 0 } +}; + static void test_nullCallback(void) { HWND hwnd; @@ -16507,8 +16513,39 @@ static void test_nullCallback(void) 100, 100, 200, 200, 0, 0, 0, NULL); ok (hwnd != 0, "Failed to create overlapped window\n");
- SendMessageCallbackA(hwnd,WM_NULL,0,0,NULL,0); + /* NULL callback and data being 0 */ + flush_sequence(); + SendMessageCallbackA(hwnd, WM_USER, 0, 0, NULL, 0); + ok_sequence(WmUserSeq, "WM_USER with NULL callback", FALSE); + + flush_sequence(); + SendMessageCallbackW(hwnd, WM_USER, 0, 0, NULL, 0); + ok_sequence(WmUserSeq, "WM_USER with NULL callback", FALSE); + + /* NULL callback and data being 1. The result suggests that the message is posted to the window */ + flush_sequence(); + SendMessageCallbackA(hwnd, WM_USER, 0, 0, NULL, 1); + ok_sequence(WmEmptySeq, "WM_USER with NULL callback", TRUE); flush_events(); + ok_sequence(WmUserSeq, "WM_USER with NULL callback after flushing events", TRUE); + + /* NULL callback and data being 1. The result suggests that the message is posted to the window */ + flush_sequence(); + SendMessageCallbackW(hwnd, WM_USER, 0, 0, NULL, 1); + ok_sequence(WmEmptySeq, "WM_USER with NULL callback", TRUE); + flush_events(); + ok_sequence(WmUserSeq, "WM_USER with NULL callback after flushing events", TRUE); + + /* NULL callback and data being 2 */ + flush_sequence(); + SendMessageCallbackA(hwnd, WM_USER, 0, 0, NULL, 2); + ok_sequence(WmUserSeq, "WM_USER with NULL callback", FALSE); + + /* NULL callback and data being 2 */ + flush_sequence(); + SendMessageCallbackW(hwnd, WM_USER, 0, 0, NULL, 2); + ok_sequence(WmUserSeq, "WM_USER with NULL callback", FALSE); + DestroyWindow(hwnd); }