Dmitry Timoshkov : user32/tests: Simplify the test for BM_CLICK on autoradio button by using a dialog.
Alexandre Julliard
julliard at winehq.org
Sun Mar 3 13:21:31 CST 2019
Module: wine
Branch: oldstable
Commit: c441573625bb0b8b42896492d8a773ddc4dca609
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c441573625bb0b8b42896492d8a773ddc4dca609
Author: Dmitry Timoshkov <dmitry at 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 at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit d57fcb41135f8686f343c3b02da81cb9e44fd670)
Conflicts:
dlls/user32/tests/msg.c
Signed-off-by: Michael Stefaniuc <mstefani at 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"
More information about the wine-cvs
mailing list