Module: wine Branch: oldstable Commit: c441573625bb0b8b42896492d8a773ddc4dca609 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c441573625bb0b8b42896492d...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Tue Nov 27 09:11:04 2018 +0300
user32/tests: Simplify the test for BM_CLICK on autoradio button by using a dialog.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit d57fcb41135f8686f343c3b02da81cb9e44fd670) Conflicts: dlls/user32/tests/msg.c Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/user32/tests/msg.c | 143 ++++++++++++++++++++++++++++++++++++++++++ dlls/user32/tests/resource.rc | 11 ++++ 2 files changed, 154 insertions(+)
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index eb5d4c4..b2c953e 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -123,6 +123,8 @@ static DWORD cbt_hook_thread_id; static const WCHAR testWindowClassW[] = { 'T','e','s','t','W','i','n','d','o','w','C','l','a','s','s','W',0 };
+static LRESULT WINAPI ParentMsgCheckProcA(HWND, UINT, WPARAM, LPARAM); + /* FIXME: add tests for these Window Edge Styles (Win31/Win95/98 look), in order of precedence: @@ -6231,7 +6233,24 @@ static LRESULT CALLBACK button_hook_proc(HWND hwnd, UINT message, WPARAM wParam, case BM_SETSTATE: if (GetCapture()) ok(GetCapture() == hwnd, "GetCapture() = %p\n", GetCapture()); + + lParam = (ULONG_PTR)GetMenu(hwnd); + goto log_it; + + case WM_GETDLGCODE: + if (lParam) + { + MSG *msg = (MSG *)lParam; + lParam = MAKELPARAM(msg->message, msg->wParam); + } + wParam = (ULONG_PTR)GetMenu(hwnd); + goto log_it; + + case BM_SETCHECK: + case BM_GETCHECK: + lParam = (ULONG_PTR)GetMenu(hwnd); /* fall through */ +log_it: default: msg.hwnd = hwnd; msg.message = message; @@ -6600,6 +6619,129 @@ static void test_button_messages(void) DestroyWindow(parent); }
+#define ID_RADIO1 501 +#define ID_RADIO2 502 +#define ID_RADIO3 503 +#define ID_TEXT 504 + +static const struct message auto_radio_button_BM_CLICK[] = +{ + { BM_CLICK, sent|wparam|lparam, 0, 0 }, + { WM_LBUTTONDOWN, sent|wparam|lparam|defwinproc, 0, 0 }, + { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, + { BM_SETSTATE, sent|wparam|lparam|defwinproc, BST_CHECKED, ID_RADIO2 }, + { WM_CTLCOLORSTATIC, sent|parent }, + { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, + { WM_LBUTTONUP, sent|wparam|lparam|defwinproc, 0, 0 }, + { BM_SETSTATE, sent|wparam|lparam|defwinproc, BST_UNCHECKED, ID_RADIO2 }, + { WM_CTLCOLORSTATIC, sent|parent }, + { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, + { WM_GETDLGCODE, sent|wparam|lparam|defwinproc, ID_RADIO2, 0 }, + { BM_SETCHECK, sent|wparam|lparam|defwinproc, BST_CHECKED, ID_RADIO2 }, + { WM_GETDLGCODE, sent|wparam|lparam|defwinproc, ID_RADIO1, 0 }, + { BM_SETCHECK, sent|wparam|lparam|defwinproc, 0, ID_RADIO1 }, + { WM_CTLCOLORSTATIC, sent|parent }, + { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, + { WM_GETDLGCODE, sent|wparam|lparam|defwinproc, ID_RADIO3, 0 }, + { BM_SETCHECK, sent|wparam|lparam|defwinproc, 0, ID_RADIO3 }, + { WM_CTLCOLORSTATIC, sent|parent }, + { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, + { WM_GETDLGCODE, sent|wparam|lparam|defwinproc, ID_TEXT, 0 }, + { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0 }, + { WM_CAPTURECHANGED, sent|wparam|lparam|defwinproc, 0, 0 }, + { WM_COMMAND, sent|wparam|parent, MAKEWPARAM(ID_RADIO2, BN_CLICKED) }, + { WM_NCHITTEST, sent|optional, 0, 0 }, /* FIXME: Wine doesn't send it */ + { WM_SETCURSOR, sent|optional, 0, 0 }, /* FIXME: Wine doesn't send it */ + { WM_MOUSEMOVE, sent|optional, 0, 0 }, /* FIXME: Wine doesn't send it */ + { 0 } +}; + +static INT_PTR WINAPI radio_test_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) +{ + ParentMsgCheckProcA(hwnd, msg, wp, lp); + return 1; +} + +static void test_autoradio_BM_CLICK(void) +{ + HWND parent, radio1, radio2, radio3; + RECT rc; + MSG msg; + DWORD ret; + + subclass_button(); + + parent = CreateDialogParamA(0, "AUTORADIO_TEST_DIALOG_1", 0, radio_test_dlg_proc, 0); + ok(parent != 0, "failed to create parent window\n"); + + radio1 = GetDlgItem(parent, ID_RADIO1); + radio2 = GetDlgItem(parent, ID_RADIO2); + radio3 = GetDlgItem(parent, ID_RADIO3); + + /* this avoids focus messages in the generated sequence */ + SetFocus(radio2); + + flush_events(); + flush_sequence(); + + ret = SendMessageA(radio1, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + ret = SendMessageA(radio2, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + ret = SendMessageA(radio3, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + + SendMessageA(radio1, BM_SETCHECK, BST_CHECKED, 0); + + ret = SendMessageA(radio1, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + ret = SendMessageA(radio2, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + ret = SendMessageA(radio3, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + + SendMessageA(radio2, BM_SETCHECK, BST_CHECKED, 0); + + ret = SendMessageA(radio1, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + ret = SendMessageA(radio2, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + ret = SendMessageA(radio3, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + + SendMessageA(radio3, BM_SETCHECK, BST_CHECKED, 0); + + ret = SendMessageA(radio1, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + ret = SendMessageA(radio2, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + ret = SendMessageA(radio3, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + + GetWindowRect(radio2, &rc); + SetCursorPos(rc.left+1, rc.top+1); + + flush_events(); + flush_sequence(); + + log_all_parent_messages++; + + SendMessageA(radio2, BM_CLICK, 0, 0); + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); + ok_sequence(auto_radio_button_BM_CLICK, "BM_CLICK on auto-radio button", FALSE); + + log_all_parent_messages--; + + ret = SendMessageA(radio1, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + ret = SendMessageA(radio2, BM_GETCHECK, 0, 0); + ok(ret == BST_CHECKED, "got %08x\n", ret); + ret = SendMessageA(radio3, BM_GETCHECK, 0, 0); + ok(ret == BST_UNCHECKED, "got %08x\n", ret); + + DestroyWindow(parent); +} + /****************** static message test *************************/ static const struct message WmSetFontStaticSeq2[] = { @@ -16924,6 +17066,7 @@ START_TEST(msg) invisible_parent_tests(); test_mdi_messages(); test_button_messages(); + test_autoradio_BM_CLICK(); test_static_messages(); test_listbox_messages(); test_combobox_messages(); diff --git a/dlls/user32/tests/resource.rc b/dlls/user32/tests/resource.rc index a9e45e9..1557291 100644 --- a/dlls/user32/tests/resource.rc +++ b/dlls/user32/tests/resource.rc @@ -75,6 +75,17 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Cancel", IDCANCEL,109,20,50,14, WS_TABSTOP | WS_GROUP }
+AUTORADIO_TEST_DIALOG_1 DIALOGEX 0, 0, 200, 200 +STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Radio Button Test Dialog" +FONT 8, "MS Shell Dlg" +{ + CONTROL "Radio1",501,"my_button_class",WS_VISIBLE | WS_CHILD | WS_GROUP | BS_AUTORADIOBUTTON | BS_NOTIFY | WS_TABSTOP,10,10,70,18 + CONTROL "Radio3",503,"my_button_class",WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON | BS_NOTIFY | WS_TABSTOP,10,35,70,18 + CONTROL "Text",504,"my_button_class",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_NOTIFY | WS_TABSTOP,10,60,70,18 + CONTROL "Radio2",502,"my_button_class",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_NOTIFY | WS_TABSTOP,10,85,70,18 +} + CLASS_TEST_DIALOG DIALOG 0, 0, 91, 28 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "CreateDialogParams Test"