From 77337d75f2902486712b0a822853453ac118085f Mon Sep 17 00:00:00 2001 From: Sergey Guralnik Date: Tue, 15 Jan 2013 11:15:56 +0200 Subject: [PATCH] user32/tests: Test standard scrollbar initialization. --- dlls/user32/tests/scroll.c | 97 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/dlls/user32/tests/scroll.c b/dlls/user32/tests/scroll.c index 1d7e75e21a7..49f42bbcd4b 100644 --- a/dlls/user32/tests/scroll.c +++ b/dlls/user32/tests/scroll.c @@ -396,6 +396,101 @@ todo_wine DestroyWindow( hwnd); } +static LRESULT CALLBACK scroll_init_proc(HWND hwnd, UINT msg, + WPARAM wparam, LPARAM lparam) +{ + SCROLLINFO horz, vert; + CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam; + BOOL h_ret, v_ret; + + switch(msg) + { + case WM_NCCREATE: + return cs->lpCreateParams ? DefWindowProcA(hwnd, msg, wparam, lparam) : + TRUE; + + case WM_CREATE: + horz.cbSize = sizeof horz; + horz.fMask = SIF_ALL; + horz.nMin = 0xdeadbeaf; + horz.nMax = 0xbaadc0de; + vert = horz; + h_ret = GetScrollInfo(hwnd, SB_HORZ, &horz); + v_ret = GetScrollInfo(hwnd, SB_VERT, &vert); + + if(cs->lpCreateParams) + { + /* WM_NCCREATE was passed to DefWindowProc */ + if(cs->style & (WS_VSCROLL | WS_HSCROLL)) + { + todo_wine + ok(h_ret && v_ret, "GetScrollInfo() should return NON-zero " + "but got h_ret=%d v_ret=%d\n", h_ret, v_ret); + todo_wine + ok(vert.nMin == 0 && vert.nMax == 100, + "unexpected init values(SB_VERT): min=%d max=%d\n", + vert.nMin, vert.nMax); + todo_wine + ok(horz.nMin == 0 && horz.nMax == 100, + "unexpected init values(SB_HORZ): min=%d max=%d\n", + horz.nMin, horz.nMax); + } + else + { + ok(!h_ret && !v_ret, "GetScrollInfo() should return zeru, " + "but got h_ret=%d v_ret=%d\n", h_ret, v_ret); + ok(vert.nMin == 0xdeadbeaf && vert.nMax == 0xbaadc0de, + "unexpected initialization(SB_VERT): min=%d max=%d\n", + vert.nMin, vert.nMax); + ok(horz.nMin == 0xdeadbeaf && horz.nMax == 0xbaadc0de, + "unexpected initialization(SB_HORZ): min=%d max=%d\n", + horz.nMin, horz.nMax); + } + } + else + { + ok(!h_ret && !v_ret, "GetScrollInfo() should return zeru, " + "but got h_ret=%d v_ret=%d\n", h_ret, v_ret); + ok(horz.nMin == 0xdeadbeaf && horz.nMax == 0xbaadc0de && + vert.nMin == 0xdeadbeaf && vert.nMax == 0xbaadc0de, + "unexpected initialization\n"); + } + return FALSE; /* abort creation */ + + default: + /* need for WM_GETMINMAXINFO, which precedes WM_NCCREATE */ + return 0; + } +} + +static void scrollbar_test_init(void) +{ + WNDCLASSEXA wc; + CHAR cls_name[] = "scroll_test_class"; + LONG style[] = {WS_VSCROLL, WS_HSCROLL, WS_VSCROLL | WS_HSCROLL, 0}; + int i; + + memset( &wc, 0, sizeof wc ); + wc.cbSize = sizeof wc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = GetModuleHandleA(0); + wc.hCursor = LoadCursorA(NULL, IDC_ARROW); + wc.hbrBackground = GetStockObject(WHITE_BRUSH); + wc.lpszClassName = cls_name; + wc.lpfnWndProc = scroll_init_proc; + RegisterClassExA(&wc); + + for(i = 0; i < sizeof style / sizeof style[0]; i++) + { + /* need not to destroy these windows due creation abort */ + CreateWindowExA(0, cls_name, NULL, style[i], + 100, 100, 100, 100, NULL, NULL, wc.hInstance, (LPVOID)TRUE); + CreateWindowExA(0, cls_name, NULL, style[i], + 100, 100, 100, 100, NULL, NULL, wc.hInstance, (LPVOID)FALSE); + } + UnregisterClassA(cls_name, wc.hInstance); +} + START_TEST ( scroll ) { WNDCLASSA wc; @@ -444,6 +539,8 @@ START_TEST ( scroll ) scrollbar_test_default( WS_VSCROLL); scrollbar_test_default( WS_HSCROLL | WS_VSCROLL); + scrollbar_test_init(); + DestroyWindow(hScroll); DestroyWindow(hMainWnd); }