[PATCH 02/11] user32/tests: Extended test about thick child windows.

Florian Köberle florian at fkoeberle.de
Tue Jan 20 06:52:34 CST 2009


---
 dlls/user32/tests/win.c |  220 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 180 insertions(+), 40 deletions(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index c73856f..605d7c5 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -5199,17 +5199,39 @@ static void test_fullscreen(void)
 
 static BOOL test_thick_child_got_minmax;
 
-static int getExpectedThickChildInc(void)
+static int getExpectedBorderSize(LONG style, LONG exStyle)
 {
-    const int outer = 2;
-    int resizeBorder = GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXDLGFRAME);
-    return (outer + resizeBorder);
+    int border;
+    if ((exStyle & (WS_EX_STATICEDGE|WS_EX_DLGMODALFRAME)) ==
+        WS_EX_STATICEDGE)
+    {
+        border = 1; /* for the outer frame always present */
+    }
+    else
+    {
+        border = 0;
+        if ((exStyle & WS_EX_DLGMODALFRAME) ||
+            (style & (WS_THICKFRAME|WS_DLGFRAME))) border = 2; /* outer */
+    }
+    if (style & WS_THICKFRAME)
+        border +=  ( GetSystemMetrics (SM_CXFRAME)
+                   - GetSystemMetrics (SM_CXDLGFRAME)); /* The resize border */
+    if ((style & (WS_BORDER|WS_DLGFRAME)) ||
+        (exStyle & WS_EX_DLGMODALFRAME))
+        border++; /* The other border */
+
+    return border;
 }
 
+static const char * test_thick_child_name;
+static LONG test_thick_child_style;
+static LONG test_thick_child_exStyle;
+
 static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
 {
     MINMAXINFO* minmax;
-    int expectedMinTrack;
+    int expectedMinTrackX;
+    int expectedMinTrackY;
     int actualMinTrackX;
     int actualMinTrackY;
     int expectedMaxTrackX;
@@ -5224,6 +5246,7 @@ static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM
     int expectedPosY;
     int actualPosX;
     int actualPosY;
+    LONG adjustedStyle;
     RECT rect;
     switch (msg)
     {
@@ -5235,40 +5258,76 @@ static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM
 
             test_thick_child_got_minmax = TRUE;
 
-            expectedMinTrack = 2* getExpectedThickChildInc();
+            if (test_thick_child_style & (WS_DLGFRAME | WS_BORDER))
+            {
+                expectedMinTrackX = GetSystemMetrics(SM_CXMINTRACK);
+                expectedMinTrackY = GetSystemMetrics(SM_CYMINTRACK);
+            }
+            else
+            {
+                expectedMinTrackX = 2 * getExpectedBorderSize(test_thick_child_style, test_thick_child_exStyle);
+                expectedMinTrackY = 2 * getExpectedBorderSize(test_thick_child_style, test_thick_child_exStyle);
+            }
             actualMinTrackX =  minmax->ptMinTrackSize.x;
             actualMinTrackY =  minmax->ptMinTrackSize.y;
-            todo_wine
-                ok(actualMinTrackX == expectedMinTrack && actualMinTrackY == expectedMinTrack,
-                    "expected minTrack %dx%d, actual minTrack %dx%d\n",
-                    expectedMinTrack, expectedMinTrack, actualMinTrackX, actualMinTrackY);
+            if (!(test_thick_child_style & (WS_DLGFRAME | WS_BORDER))) {
+                todo_wine
+                    ok(actualMinTrackX == expectedMinTrackX && actualMinTrackY == expectedMinTrackY,
+                        "expected minTrack %dx%d, actual minTrack %dx%d for %s\n",
+                        expectedMinTrackX, expectedMinTrackY, actualMinTrackX, actualMinTrackY,
+                        test_thick_child_name);
+            }
+            else
+            {
+                ok(actualMinTrackX == expectedMinTrackX && actualMinTrackY == expectedMinTrackY,
+                    "expected minTrack %dx%d, actual minTrack %dx%d for %s\n",
+                    expectedMinTrackX, expectedMinTrackY, actualMinTrackX, actualMinTrackY,
+                    test_thick_child_name);
+            }
 
             actualMaxTrackX = minmax->ptMaxTrackSize.x;
             actualMaxTrackY = minmax->ptMaxTrackSize.y;
             expectedMaxTrackX = GetSystemMetrics(SM_CXMAXTRACK);
             expectedMaxTrackY = GetSystemMetrics(SM_CYMAXTRACK);
             ok(actualMaxTrackX == expectedMaxTrackX &&  actualMaxTrackY == expectedMaxTrackY,
-                "expected maxTrack %dx%d, actual maxTrack %dx%d\n",
-                 expectedMaxTrackX, expectedMaxTrackY, actualMaxTrackX, actualMaxTrackY);
+                "expected maxTrack %dx%d, actual maxTrack %dx%d for %s\n",
+                 expectedMaxTrackX, expectedMaxTrackY, actualMaxTrackX, actualMaxTrackY,
+                test_thick_child_name);
 
+            adjustedStyle = test_thick_child_style;
+            if ((adjustedStyle & WS_CAPTION) == WS_CAPTION)
+                adjustedStyle &= ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */
             GetClientRect(GetParent(hwnd), &rect);
-            AdjustWindowRectEx(&rect, WS_CHILD | WS_VISIBLE | WS_THICKFRAME, FALSE, 0);
+            AdjustWindowRectEx(&rect, adjustedStyle, FALSE, test_thick_child_exStyle);
             expectedMaxSizeX = rect.right - rect.left;
             expectedMaxSizeY = rect.bottom - rect.top;
             actualMaxSizeX = minmax->ptMaxSize.x;
             actualMaxSizeY = minmax->ptMaxSize.y;
-            ok(actualMaxSizeX == expectedMaxSizeX &&  actualMaxSizeY == expectedMaxSizeY,
-                "expected maxSize %dx%d, actual maxSize %dx%d\n",
-                expectedMaxSizeX, expectedMaxSizeY, actualMaxSizeX, actualMaxSizeY);
+            if (test_thick_child_exStyle & WS_EX_DLGMODALFRAME)
+            {
+                todo_wine
+                    ok(actualMaxSizeX == expectedMaxSizeX &&  actualMaxSizeY == expectedMaxSizeY,
+                        "expected maxSize %dx%d, actual maxSize %dx%d for %s\n",
+                        expectedMaxSizeX, expectedMaxSizeY, actualMaxSizeX, actualMaxSizeY,
+                        test_thick_child_name);
+            }
+            else
+            {
+                ok(actualMaxSizeX == expectedMaxSizeX &&  actualMaxSizeY == expectedMaxSizeY,
+                    "expected maxSize %dx%d, actual maxSize %dx%d for %s\n",
+                    expectedMaxSizeX, expectedMaxSizeY, actualMaxSizeX, actualMaxSizeY,
+                    test_thick_child_name);
+            }
 
-            expectedPosX = - getExpectedThickChildInc();
+            expectedPosX = - getExpectedBorderSize(test_thick_child_style, test_thick_child_exStyle);
             expectedPosY = expectedPosX;
             actualPosX = minmax->ptMaxPosition.x;
             actualPosY = minmax->ptMaxPosition.y;
             todo_wine
                 ok(actualPosX == expectedPosX && actualPosY == expectedPosY,
-                    "expected maxPosition (%d/%d), actual maxPosition (%d/%d)\n",
-                    expectedPosX, expectedPosY, actualPosX, actualPosY);
+                    "expected maxPosition (%d/%d), actual maxPosition (%d/%d) for %s\n",
+                    expectedPosX, expectedPosY, actualPosX, actualPosY, test_thick_child_name);
+
             break;
         }
     }
@@ -5276,6 +5335,7 @@ static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM
     return DefWindowProcA(hwnd, msg, wparam, lparam);
 }
 
+#define NUMBER_OF_THICK_CHILD_TESTS 16
 static void test_thick_child_size(HWND parentWindow)
 {
     BOOL success;
@@ -5283,12 +5343,66 @@ static void test_thick_child_size(HWND parentWindow)
     HWND childWindow;
     LONG childWidth;
     LONG childHeight;
+    LONG expectedWidth;
+    LONG expectedHeight;
     WNDCLASSA cls;
     LPCTSTR className = "THICK_CHILD_CLASS";
-    LONG style = WS_CHILD | WS_VISIBLE | WS_THICKFRAME;
-    LONG exStyle = 0;
-    int expectedSize = 2*getExpectedThickChildInc();
+    int i;
+    static const LONG styles[NUMBER_OF_THICK_CHILD_TESTS] = {
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+        WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+    };
 
+    static const LONG exStyles[NUMBER_OF_THICK_CHILD_TESTS] = {
+        0,
+        0,
+        0,
+        0,
+        WS_EX_DLGMODALFRAME,
+        WS_EX_DLGMODALFRAME,
+        WS_EX_DLGMODALFRAME,
+        WS_EX_DLGMODALFRAME,
+        WS_EX_STATICEDGE,
+        WS_EX_STATICEDGE,
+        WS_EX_STATICEDGE,
+        WS_EX_STATICEDGE,
+        WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+        WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+        WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+        WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+    };
+    static const char *styleName[NUMBER_OF_THICK_CHILD_TESTS] = {
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME, exstyle= WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME exstyle= WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER exstyle= WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER exstyle= WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME exstyle= WS_EX_STATICEDGE",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME exstyle= WS_EX_STATICEDGE",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME, exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+        "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+    };
 
     cls.style = 0;
     cls.lpfnWndProc = test_thick_child_size_winproc;
@@ -5296,36 +5410,62 @@ static void test_thick_child_size(HWND parentWindow)
     cls.cbWndExtra = 0;
     cls.hInstance = GetModuleHandleA(0);
     cls.hIcon = 0;
-    cls.hCursor = LoadCursorA(0, IDC_ARROW);
+    cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
     cls.hbrBackground = GetStockObject(WHITE_BRUSH);
     cls.lpszMenuName = NULL;
     cls.lpszClassName = className;
     SetLastError(0xdeadbeef);
     ok(RegisterClassA(&cls),"RegisterClassA failed, error: %u\n", GetLastError());
 
-    test_thick_child_got_minmax = FALSE;
+    for(i = 0; i < NUMBER_OF_THICK_CHILD_TESTS; i++)
+    {
+        test_thick_child_name = styleName[i];
+        test_thick_child_style = styles[i];
+        test_thick_child_exStyle = exStyles[i];
+        test_thick_child_got_minmax = FALSE;
 
-    SetLastError(0xdeadbeef);
-    childWindow = CreateWindowEx( exStyle, className, "", style,  0, 0, 0, 0, parentWindow, 0,  GetModuleHandleA(0),  NULL );
-    ok(childWindow != NULL, "Failed to create child window, error: %u\n", GetLastError());
+        SetLastError(0xdeadbeef);
+        childWindow = CreateWindowEx( exStyles[i], className, "", styles[i],  0, 0, 0, 0, parentWindow, 0,  GetModuleHandleA(0),  NULL );
+        ok(childWindow != NULL, "Failed to create child window, error: %u\n", GetLastError());
 
-    ok(test_thick_child_got_minmax, "Got no WM_GETMINMAXINFO\n");
+        ok(test_thick_child_got_minmax, "Got no WM_GETMINMAXINFO\n");
 
-    SetLastError(0xdeadbeef);
-    success = GetWindowRect(childWindow, &childRect);
-    ok(success,"GetWindowRect call failed, error: %u\n", GetLastError());
-    childWidth = childRect.right - childRect.left;
-    childHeight = childRect.bottom - childRect.top;
+        SetLastError(0xdeadbeef);
+        success = GetWindowRect(childWindow, &childRect);
+        ok(success,"GetWindowRect call failed, error: %u\n", GetLastError());
+        childWidth = childRect.right - childRect.left;
+        childHeight = childRect.bottom - childRect.top;
 
-    todo_wine
-        ok( (childWidth == expectedSize) && (childHeight == expectedSize),
-            "size of window with style WS_CHILD | WS_VISIBLE | WS_THICKFRAME  is wrong: expected size %dx%d != actual size %dx%d\n",
-            expectedSize, expectedSize, childWidth, childHeight);
+        if (test_thick_child_style & (WS_DLGFRAME | WS_BORDER))
+        {
+            expectedWidth = GetSystemMetrics(SM_CXMINTRACK);
+            expectedHeight = GetSystemMetrics(SM_CYMINTRACK);
+        }
+        else
+        {
+            expectedWidth = 2 * getExpectedBorderSize(test_thick_child_style, test_thick_child_exStyle);
+            expectedHeight = 2 * getExpectedBorderSize(test_thick_child_style, test_thick_child_exStyle);
+        }
+
+        if (!(test_thick_child_style & (WS_DLGFRAME | WS_BORDER)))
+        {
+            todo_wine
+                ok((childWidth == expectedWidth) && (childHeight == expectedHeight),
+                    "size of window (%s) is wrong: expected size %dx%d != actual size %dx%d\n",
+                    test_thick_child_name, expectedWidth, expectedHeight, childWidth, childHeight);
+        }
+        else
+        {
+            ok((childWidth == expectedWidth) && (childHeight == expectedHeight),
+                "size of window (%s) is wrong: expected size %dx%d != actual size %dx%d\n",
+                test_thick_child_name, expectedWidth, expectedHeight, childWidth, childHeight);
+        }
 
 
-    SetLastError(0xdeadbeef);
-    success = DestroyWindow(childWindow);
-    ok(success,"DestroyWindow call failed, error: %u\n", GetLastError());
+        SetLastError(0xdeadbeef);
+        success = DestroyWindow(childWindow);
+        ok(success,"DestroyWindow call failed, error: %u\n", GetLastError());
+    }
     ok(UnregisterClass(className, GetModuleHandleA(0)),"UnregisterClass call failed\n");
 }
 
-- 
1.5.4.3




More information about the wine-patches mailing list