From: Tobiasz Laskowski <tlaskowski@codeweavers.com> --- dlls/user32/tests/listbox.c | 72 ++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/dlls/user32/tests/listbox.c b/dlls/user32/tests/listbox.c index 3aba6a297bf..b2036b04525 100644 --- a/dlls/user32/tests/listbox.c +++ b/dlls/user32/tests/listbox.c @@ -188,7 +188,7 @@ check (DWORD style, const struct listbox_test test) free(txtw); free(txt); } - + /* Confirm the count of items, and that an invalid delete does not remove anything */ res = SendMessageA(hLB, LB_GETCOUNT, 0, 0); ok((res==4), "Expected 4 items, got %d\n", res); @@ -2579,6 +2579,75 @@ static void test_integral_resize(void) DestroyWindow(parent); } +static void test_LB_SETTOPINDEX(void) { + HWND parent, listbox; + int i; + int ret; + + parent = create_parent(); + listbox = CreateWindowA("listbox", "TestList", + WS_CHILD | WS_VISIBLE, 0, 0, 200, 100, parent, NULL, NULL, 0); + ok(!!listbox, "got error %lu\n", GetLastError()); + + for (i = 0; i < 10; i++) + { + SendMessageA(listbox, LB_ADDSTRING, 0, (LPARAM)"item"); + } + + /* Normal range */ + ret = SendMessageA(listbox, LB_SETTOPINDEX, 3, 0); + ok(!ret, "got %d\n", ret); + + ret = SendMessageA(listbox, LB_GETTOPINDEX, 0, 0); + ok(ret == 3, "got %d\n", ret); + + ret = SendMessageA(listbox, LB_SETTOPINDEX, 0, 0); + ok(!ret, "got %d\n", ret); + + ret = SendMessageA(listbox, LB_GETTOPINDEX, 0, 0); + ok(ret == 0, "got %d\n", ret); + + /* Less than item count, but greater than max top index (to which it gets clamped) */ + ret = SendMessageA(listbox, LB_SETTOPINDEX, 5, 0); + ok(!ret, "got %d\n", ret); + + ret = SendMessageA(listbox, LB_GETTOPINDEX, 0, 0); + ok(ret == 4, "got %d\n", ret); + + /* Reset to a non-boundary top item */ + ret = SendMessageA(listbox, LB_SETTOPINDEX, 2, 0); + ok(!ret, "got %d\n", ret); + + /* Greater than or equal to item count (out of bounds) */ + ret = SendMessageA(listbox, LB_SETTOPINDEX, 10, 0); + todo_wine + ok(ret == LB_ERR, "got %d\n", ret); + + ret = SendMessageA(listbox, LB_GETTOPINDEX, 0, 0); + todo_wine + ok(ret == 2, "got %d\n", ret); + + ret = SendMessageA(listbox, LB_SETTOPINDEX, 20, 0); + todo_wine + ok(ret == LB_ERR, "Expected LB_ERR, got %d\n", ret); + + ret = SendMessageA(listbox, LB_GETTOPINDEX, 0, 0); + todo_wine + ok(ret == 2, "got %d\n", ret); + + /* Negative (out of bounds) */ + ret = SendMessageA(listbox, LB_SETTOPINDEX, -1, 0); + todo_wine + ok(ret == LB_ERR, "Expected LB_ERR, got %d\n", ret); + + ret = SendMessageA(listbox, LB_GETTOPINDEX, 0, 0); + todo_wine + ok(ret == 2, "got %d\n", ret); + + DestroyWindow(listbox); + DestroyWindow(parent); +} + START_TEST(listbox) { const struct listbox_test SS = @@ -2680,4 +2749,5 @@ START_TEST(listbox) test_LBS_NODATA(); test_LB_FINDSTRING(); test_integral_resize(); + test_LB_SETTOPINDEX(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11507