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

Waritnan Sookbuntherng lion328 at hotmail.co.th
Tue Nov 20 05:51:38 CST 2018


Signed-off-by: Waritnan Sookbuntherng <lion328 at hotmail.co.th>
---
v2: Add tests.
v3: Cover more points.
---
 dlls/comctl32/tests/status.c | 85 ++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/dlls/comctl32/tests/status.c b/dlls/comctl32/tests/status.c
index d78bd20262..074e637801 100644
--- a/dlls/comctl32/tests/status.c
+++ b/dlls/comctl32/tests/status.c
@@ -20,6 +20,7 @@
 
 #include <windows.h>
 #include <commctrl.h>
+#include <uxtheme.h>
 
 #include "wine/test.h"
 
@@ -586,6 +587,89 @@ 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 rcClient, rcGripper;
+    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);
+    GetClientRect(hwndStatus, &rcClient);
+
+    width = GetSystemMetrics(SM_CXVSCROLL);
+
+    rcGripper = rcClient;
+    rcGripper.left = rcClient.right - width;
+
+#define SETWNDLONG(MAXIMIZE, RTL) \
+        do \
+        { \
+            SetWindowLongA(g_hMainWnd, GWL_STYLE, (MAXIMIZE) ? style|WS_MAXIMIZE : style); \
+            SetWindowLongA(hwndStatus, GWL_EXSTYLE, (RTL) ? WS_EX_LAYOUTRTL : 0); \
+        } while (0)
+
+#define TEST_NCHITTEST(X, Y, EXPECT) \
+        do \
+        { \
+            pt.x = (X); \
+            pt.y = (Y); \
+            ClientToScreen(hwndStatus, &pt); \
+            r = SendMessageA(hwndStatus, WM_NCHITTEST, 0, MAKELPARAM(pt.x, pt.y)); \
+            ok((EXPECT) == r, "expect WM_NCHITTEST " #EXPECT " got %#x\n", r); \
+        } while (0)
+
+    /* check bounds when not maximized */
+    SETWNDLONG(FALSE, FALSE);
+    todo_wine TEST_NCHITTEST(rcGripper.left, rcGripper.top, HTBOTTOMRIGHT);
+    TEST_NCHITTEST(rcGripper.left - 1, rcGripper.top, HTCLIENT);
+    todo_wine TEST_NCHITTEST(rcGripper.left, rcGripper.top - 1, HTBOTTOMRIGHT);
+    todo_wine TEST_NCHITTEST(rcGripper.right, rcGripper.bottom, HTBOTTOMRIGHT);
+    todo_wine TEST_NCHITTEST(rcGripper.right + 1, rcGripper.bottom, HTBOTTOMRIGHT);
+    todo_wine TEST_NCHITTEST(rcGripper.right, rcGripper.bottom + 1, HTBOTTOMRIGHT);
+    TEST_NCHITTEST(rcGripper.right - 1, rcGripper.bottom - 1, HTBOTTOMRIGHT);
+
+    /* maximized */
+    SETWNDLONG(TRUE, FALSE);
+    TEST_NCHITTEST(rcGripper.left, rcGripper.top, HTCLIENT);
+    TEST_NCHITTEST(rcGripper.left - 1, rcGripper.top, HTCLIENT);
+    TEST_NCHITTEST(rcGripper.left, rcGripper.top - 1, HTNOWHERE);
+    TEST_NCHITTEST(rcGripper.right, rcGripper.bottom, HTNOWHERE);
+    TEST_NCHITTEST(rcGripper.right + 1, rcGripper.bottom, HTNOWHERE);
+    TEST_NCHITTEST(rcGripper.right, rcGripper.bottom + 1, HTNOWHERE);
+    todo_wine TEST_NCHITTEST(rcGripper.right - 1, rcGripper.bottom - 1, HTCLIENT);
+
+    /* not maximized and right-to-left */
+    SETWNDLONG(FALSE, TRUE);
+    todo_wine TEST_NCHITTEST(rcGripper.left, rcGripper.top, HTBOTTOMLEFT);
+    TEST_NCHITTEST(rcGripper.left - 1, rcGripper.top, HTCLIENT);
+    todo_wine TEST_NCHITTEST(rcGripper.left, rcGripper.top - 1, HTBOTTOMLEFT);
+    todo_wine TEST_NCHITTEST(rcGripper.right, rcGripper.bottom, HTBOTTOMLEFT);
+    todo_wine TEST_NCHITTEST(rcGripper.right + 1, rcGripper.bottom, HTBOTTOMLEFT);
+    todo_wine TEST_NCHITTEST(rcGripper.right, rcGripper.bottom + 1, HTBOTTOMLEFT);
+    TEST_NCHITTEST(rcGripper.right - 1, rcGripper.bottom - 1, HTBOTTOMLEFT);
+
+    /* maximized with right-to-left */
+    SETWNDLONG(TRUE, TRUE);
+    TEST_NCHITTEST(rcGripper.left, rcGripper.top, HTCLIENT);
+    TEST_NCHITTEST(rcGripper.left - 1, rcGripper.top, HTCLIENT);
+    TEST_NCHITTEST(rcGripper.left, rcGripper.top - 1, HTNOWHERE);
+    TEST_NCHITTEST(rcGripper.right, rcGripper.bottom, HTNOWHERE);
+    TEST_NCHITTEST(rcGripper.right + 1, rcGripper.bottom, HTNOWHERE);
+    TEST_NCHITTEST(rcGripper.right, rcGripper.bottom + 1, HTNOWHERE);
+    todo_wine TEST_NCHITTEST(rcGripper.right - 1, rcGripper.bottom - 1, HTCLIENT);
+
+#undef TEST_NCHITTEST
+#undef SETWNDLONG
+
+    SetWindowLongA(g_hMainWnd, GWL_STYLE, style);
+    DestroyWindow(hwndStatus);
+}
+
 static void init_functions(void)
 {
     HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
@@ -620,4 +704,5 @@ START_TEST(status)
     test_status_ownerdraw();
     test_gettext();
     test_notify();
+    test_sizegrip();
 }
-- 
2.19.1




More information about the wine-devel mailing list