comctl32/tests: Add combo tests for WM_CTLCOLOR*.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Fabian Maurer 2019-11-04 10:30:26 +03:00 committed by Alexandre Julliard
parent 89ef98ab8a
commit e95873997f
1 changed files with 98 additions and 0 deletions

View File

@ -46,6 +46,8 @@ static HWND hComboExParentWnd, hMainWnd;
static HINSTANCE hMainHinst;
static const char ComboExTestClass[] = "ComboExTestClass";
static HBRUSH brush_red;
static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
#define MAX_CHARS 100
@ -507,6 +509,8 @@ static BOOL init(void)
wc.lpfnWndProc = ComboExTestWndProc;
RegisterClassA(&wc);
brush_red = CreateSolidBrush(RGB(255, 0, 0));
hMainWnd = CreateWindowA(WC_STATICA, "Test", WS_OVERLAPPEDWINDOW, 10, 10, 300, 300, NULL, NULL, NULL, 0);
ShowWindow(hMainWnd, SW_SHOW);
@ -533,6 +537,7 @@ static void cleanup(void)
UnregisterClassA(ComboExTestClass, GetModuleHandleA(NULL));
DestroyWindow(hMainWnd);
DeleteObject(brush_red);
}
static void test_comboex_subclass(void)
@ -717,6 +722,7 @@ static LRESULT (CALLBACK *old_parent_proc)(HWND hwnd, UINT msg, WPARAM wparam, L
static LPCSTR expected_edit_text;
static LPCSTR expected_list_text;
static BOOL selchange_fired;
static HWND lparam_for_WM_CTLCOLOR;
static LRESULT CALLBACK parent_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
@ -748,6 +754,20 @@ static LRESULT CALLBACK parent_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPAR
break;
}
break;
case WM_CTLCOLOR:
case WM_CTLCOLORMSGBOX:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
case WM_CTLCOLORBTN:
case WM_CTLCOLORDLG:
case WM_CTLCOLORSCROLLBAR:
case WM_CTLCOLORSTATIC:
if (lparam_for_WM_CTLCOLOR)
{
ok(lparam_for_WM_CTLCOLOR == (HWND)lparam, "Expected %p, got %p\n", lparam_for_WM_CTLCOLOR, (HWND)lparam);
return (LRESULT) brush_red;
}
break;
}
return CallWindowProcA(old_parent_proc, hwnd, msg, wparam, lparam);
@ -1254,6 +1274,83 @@ static void test_combo_dropdown_size(DWORD style)
}
}
static void test_combo_ctlcolor(void)
{
static const int messages[] =
{
WM_CTLCOLOR,
WM_CTLCOLORMSGBOX,
WM_CTLCOLOREDIT,
WM_CTLCOLORLISTBOX,
WM_CTLCOLORBTN,
WM_CTLCOLORDLG,
WM_CTLCOLORSCROLLBAR,
WM_CTLCOLORSTATIC,
};
HBRUSH brush, global_brush;
COMBOBOXINFO info;
unsigned int i;
HWND combo;
combo = create_combobox(CBS_DROPDOWN);
ok(!!combo, "Failed to create combo window.\n");
old_parent_proc = (void *)SetWindowLongPtrA(hMainWnd, GWLP_WNDPROC, (ULONG_PTR)parent_wnd_proc);
get_combobox_info(combo, &info);
lparam_for_WM_CTLCOLOR = info.hwndItem;
/* Parent returns valid brush handle. */
for (i = 0; i < ARRAY_SIZE(messages); ++i)
{
brush = (HBRUSH)SendMessageA(combo, messages[i], 0, (LPARAM)info.hwndItem);
todo_wine
ok(brush == brush_red, "%u: unexpected brush %p, expected got %p.\n", i, brush, brush_red);
}
/* Parent returns NULL brush. */
global_brush = brush_red;
brush_red = NULL;
for (i = 0; i < ARRAY_SIZE(messages); ++i)
{
brush = (HBRUSH)SendMessageA(combo, messages[i], 0, (LPARAM)info.hwndItem);
todo_wine
ok(!brush, "%u: unexpected brush %p.\n", i, brush);
}
brush_red = global_brush;
lparam_for_WM_CTLCOLOR = 0;
/* Parent does default processing. */
for (i = 0; i < ARRAY_SIZE(messages); ++i)
{
brush = (HBRUSH)SendMessageA(combo, messages[i], 0, (LPARAM)info.hwndItem);
ok(!!brush && brush != brush_red, "%u: unexpected brush %p.\n", i, brush);
}
SetWindowLongPtrA(hMainWnd, GWLP_WNDPROC, (ULONG_PTR)old_parent_proc);
DestroyWindow(combo);
/* Combo without a parent. */
combo = CreateWindowA(WC_COMBOBOXA, "Combo", CBS_DROPDOWN, 5, 5, 100, 100, NULL, NULL, NULL, 0);
ok(!!combo, "Failed to create combo window.\n");
get_combobox_info(combo, &info);
for (i = 0; i < ARRAY_SIZE(messages); ++i)
{
brush = (HBRUSH)SendMessageA(combo, messages[i], 0, (LPARAM)info.hwndItem);
todo_wine
ok(!brush, "%u: unexpected brush %p.\n", i, brush);
}
DestroyWindow(combo);
}
START_TEST(combo)
{
ULONG_PTR ctx_cookie;
@ -1297,6 +1394,7 @@ START_TEST(combo)
test_combo_listbox_styles(CBS_DROPDOWNLIST);
test_combo_dropdown_size(0);
test_combo_dropdown_size(CBS_NOINTEGRALHEIGHT);
test_combo_ctlcolor();
cleanup();
unload_v6_module(ctx_cookie, hCtx);