[PATCH v4 1/3] comctl32/tests: Test status bar size grip behavior and bounds.

Waritnan Sookbuntherng lion328 at hotmail.co.th
Mon Dec 10 03:52:09 CST 2018


Signed-off-by: Waritnan Sookbuntherng <lion328 at hotmail.co.th>
---
v2: Add tests.
v3: Cover more points.
v4: Remove unused leftover uxtheme include and remove macros from the test.
---
 dlls/comctl32/tests/status.c | 126 +++++++++++++++++++++++++++++++++++
 1 file changed, 126 insertions(+)

diff --git a/dlls/comctl32/tests/status.c b/dlls/comctl32/tests/status.c
index d78bd20262..00db9f6737 100644
--- a/dlls/comctl32/tests/status.c
+++ b/dlls/comctl32/tests/status.c
@@ -586,6 +586,131 @@ static void test_notify(void)
     ok(g_got_contextmenu, "WM_RBUTTONUP did not activate the context menu!\n");
 }
 
+static void test_sizegrip(void)
+{
+    HWND hwndStatus;
+    LONG style;
+    RECT rc, rcClient;
+    POINT pt;
+    int width, r;
+
+    hwndStatus = CreateWindowA(SUBCLASS_NAME, "", WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP,
+      0, 0, 100, 100, g_hMainWnd, NULL, NULL, NULL);
+
+    style = GetWindowLongPtrA(g_hMainWnd, GWL_STYLE);
+    width = GetSystemMetrics(SM_CXVSCROLL);
+
+    GetClientRect(hwndStatus, &rcClient);
+
+    pt.x = rcClient.right;
+    pt.y = rcClient.top;
+    ClientToScreen(hwndStatus, &pt);
+    rc.left = pt.x - width;
+    rc.right = pt.x;
+    rc.top = pt.y;
+
+    pt.y = rcClient.bottom;
+    ClientToScreen(hwndStatus, &pt);
+    rc.bottom = pt.y;
+
+    /* check bounds when not maximized */
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top));
+    todo_wine expect(HTBOTTOMRIGHT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left - 1, rc.top));
+    expect(HTCLIENT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top - 1));
+    todo_wine expect(HTBOTTOMRIGHT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom));
+    todo_wine expect(HTBOTTOMRIGHT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right + 1, rc.bottom));
+    todo_wine expect(HTBOTTOMRIGHT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom + 1));
+    todo_wine expect(HTBOTTOMRIGHT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right - 1, rc.bottom - 1));
+    expect(HTBOTTOMRIGHT, r);
+
+    /* not maximized and right-to-left */
+    SetWindowLongA(hwndStatus, GWL_EXSTYLE, WS_EX_LAYOUTRTL);
+
+    pt.x = rcClient.right;
+    ClientToScreen(hwndStatus, &pt);
+    rc.left = pt.x + width;
+    rc.right = pt.x;
+
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top));
+    todo_wine expect(HTBOTTOMLEFT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left + 1, rc.top));
+    expect(HTCLIENT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top - 1));
+    todo_wine expect(HTBOTTOMLEFT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom));
+    todo_wine expect(HTBOTTOMLEFT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right - 1, rc.bottom));
+    todo_wine expect(HTBOTTOMLEFT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom + 1));
+    todo_wine expect(HTBOTTOMLEFT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right + 1, rc.bottom - 1));
+    expect(HTBOTTOMLEFT, r);
+
+    /* maximize with left-to-right */
+    SetWindowLongA(g_hMainWnd, GWL_STYLE, style|WS_MAXIMIZE);
+    SetWindowLongA(hwndStatus, GWL_EXSTYLE, 0);
+
+    GetClientRect(hwndStatus, &rcClient);
+
+    pt.x = rcClient.right;
+    pt.y = rcClient.top;
+    ClientToScreen(hwndStatus, &pt);
+    rc.left = pt.x - width;
+    rc.right = pt.x;
+    rc.top = pt.y;
+
+    pt.y = rcClient.bottom;
+    ClientToScreen(hwndStatus, &pt);
+    rc.bottom = pt.y;
+
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top));
+    expect(HTCLIENT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left - 1, rc.top));
+    expect(HTCLIENT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top - 1));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right + 1, rc.bottom));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom + 1));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right - 1, rc.bottom - 1));
+    todo_wine expect(HTCLIENT, r);
+
+    /* maximized with right-to-left */
+    SetWindowLongA(hwndStatus, GWL_EXSTYLE, WS_EX_LAYOUTRTL);
+
+    pt.x = rcClient.right;
+    ClientToScreen(hwndStatus, &pt);
+    rc.left = pt.x + width;
+    rc.right = pt.x;
+
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top));
+    expect(HTCLIENT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left + 1, rc.top));
+    expect(HTCLIENT, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.left, rc.top - 1));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right - 1, rc.bottom));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right, rc.bottom + 1));
+    expect(HTNOWHERE, r);
+    r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(rc.right + 1, rc.bottom - 1));
+    todo_wine expect(HTCLIENT, r);
+
+    SetWindowLongA(g_hMainWnd, GWL_STYLE, style);
+    DestroyWindow(hwndStatus);
+}
+
 static void init_functions(void)
 {
     HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
@@ -620,4 +745,5 @@ START_TEST(status)
     test_status_ownerdraw();
     test_gettext();
     test_notify();
+    test_sizegrip();
 }
-- 
2.19.1




More information about the wine-devel mailing list