From d3cb9a2961570c55751d4f835829513116b86963 Mon Sep 17 00:00:00 2001 From: Akihiro Sagawa Date: Thu, 12 Aug 2021 21:17:44 +0900 Subject: [PATCH] comctl32/tests: Test pending redraw state with owner-drawn list box. Signed-off-by: Akihiro Sagawa Signed-off-by: Alexandre Julliard --- dlls/comctl32/tests/listbox.c | 50 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/dlls/comctl32/tests/listbox.c b/dlls/comctl32/tests/listbox.c index 4d44137e4d0..5e7f53289fd 100644 --- a/dlls/comctl32/tests/listbox.c +++ b/dlls/comctl32/tests/listbox.c @@ -326,7 +326,7 @@ static void test_item_height(void) DestroyWindow (hLB); } -static int got_selchange; +static unsigned int got_selchange, got_drawitem; static LRESULT WINAPI main_window_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -418,6 +418,7 @@ static LRESULT WINAPI main_window_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARA SendMessageA(dis->hwndItem, LB_GETITEMRECT, dis->itemID, (LPARAM)&rc_item); ok(EqualRect(&dis->rcItem, &rc_item), "item rects are not equal\n"); + got_drawitem++; break; } @@ -467,6 +468,19 @@ static void test_ownerdraw(void) 0, LBS_NODATA }; + static const struct { + UINT message; + WPARAM wparam; + LPARAM lparam; + UINT drawitem; + } testcase[] = { + { WM_NULL, 0, 0, 0 }, + { WM_PAINT, 0, 0, 0 }, + { LB_GETCOUNT, 0, 0, 0 }, + { LB_SETCOUNT, ARRAY_SIZE(strings), 0, ARRAY_SIZE(strings) }, + { LB_ADDSTRING, 0, (LPARAM)"foo", ARRAY_SIZE(strings)+1 }, + { LB_DELETESTRING, 0, 0, ARRAY_SIZE(strings)-1 }, + }; HWND parent, hLB; INT ret; RECT rc; @@ -528,6 +542,40 @@ static void test_ownerdraw(void) DestroyWindow (hLB); } + /* test pending redraw state */ + for (i = 0; i < ARRAY_SIZE(testcase); i++) + { + winetest_push_context("%d", i); + hLB = create_listbox(LBS_OWNERDRAWFIXED | LBS_NODATA | WS_CHILD | WS_VISIBLE, parent); + assert(hLB); + + ret = SendMessageA(hLB, WM_SETREDRAW, FALSE, 0); + ok(!ret, "got %d\n", ret); + ret = SendMessageA(hLB, testcase[i].message, testcase[i].wparam, testcase[i].lparam); + if (testcase[i].message >= LB_ADDSTRING && testcase[i].message < LB_MSGMAX && + testcase[i].message != LB_SETCOUNT) + ok(ret > 0, "expected > 0, got %d\n", ret); + else + ok(!ret, "expected 0, got %d\n", ret); + + got_drawitem = 0; + ret = RedrawWindow(hLB, NULL, 0, RDW_UPDATENOW); + ok(ret, "RedrawWindow failed\n"); + ok(!got_drawitem, "got %u\n", got_drawitem); + + ret = SendMessageA(hLB, WM_SETREDRAW, TRUE, 0); + ok(!ret, "got %d\n", ret); + + got_drawitem = 0; + ret = RedrawWindow(hLB, NULL, 0, RDW_UPDATENOW); + ok(ret, "RedrawWindow failed\n"); + todo_wine_if(testcase[i].message == LB_SETCOUNT) + ok(got_drawitem == testcase[i].drawitem, "expected %u, got %u\n", testcase[i].drawitem, got_drawitem); + + DestroyWindow(hLB); + winetest_pop_context(); + } + DestroyWindow(parent); } -- 2.11.4.GIT