[try3 2/5] user32/tests: Test size and minmax of WS_THICKFRAME child.

Florian Köberle florian at fkoeberle.de
Wed Nov 19 04:07:00 CST 2008


---
 dlls/user32/tests/win.c |  133 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 133 insertions(+), 0 deletions(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 63eeb25..ee24159 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -61,6 +61,8 @@ static const char* szAWRClass = "Winsize";
 static HMENU hmenu;
 static DWORD our_pid;
 
+static BOOL test_thick_child_got_minmax;
+
 #define COUNTOF(arr) (sizeof(arr)/sizeof(arr[0]))
 
 static void dump_minmax_info( const MINMAXINFO *minmax )
@@ -5121,6 +5123,136 @@ static void test_fullscreen(void)
     UnregisterClass("fullscreen_class", GetModuleHandle(0));
 }
 
+
+static int getExpectedThickChildInc() {
+    const int outer = 2;
+    int resizeBorder = GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXDLGFRAME);
+    return (outer + resizeBorder);
+}
+
+static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    MINMAXINFO* minmax;
+    int expectedMinTrack;
+    int actualMinTrackX;
+    int actualMinTrackY;
+    int expectedMaxTrackX;
+    int expectedMaxTrackY;
+    int actualMaxTrackX;
+    int actualMaxTrackY;
+    int expectedMaxSizeX;
+    int expectedMaxSizeY;
+    int actualMaxSizeX;
+    int actualMaxSizeY;
+    int expectedPosX;
+    int expectedPosY;
+    int actualPosX;
+    int actualPosY;
+    RECT rect;
+    switch (msg)
+    {
+        case WM_GETMINMAXINFO:
+        {
+            minmax = (MINMAXINFO *)lparam;
+            trace("hwnd %p, WM_GETMINMAXINFO, %08lx, %08lx\n", hwnd, wparam, lparam);
+            dump_minmax_info( minmax );
+
+            test_thick_child_got_minmax = TRUE;
+
+            expectedMinTrack = 2* getExpectedThickChildInc();
+            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);
+
+            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);
+
+            GetClientRect(GetAncestor(hwnd, GA_PARENT), &rect);
+            AdjustWindowRectEx(&rect, WS_CHILD | WS_VISIBLE | WS_THICKFRAME, FALSE, 0);
+            expectedMaxSizeX = rect.right - rect.left;
+            expectedMaxSizeY = rect.bottom - rect.top; 
+            actualMaxSizeX = minmax->ptMaxSize.x;
+            actualMaxSizeY = minmax->ptMaxSize.y;
+            ok(actualMaxSizeX == expectedMaxSizeX &&  actualMaxSizeY == expectedMaxSizeY,
+                "expected maxTrack %dx%d, actual maxTrack %dx%d\n",
+                expectedMaxSizeX, expectedMaxSizeY, actualMaxSizeX, actualMaxSizeY);
+
+            expectedPosX = - getExpectedThickChildInc();
+            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);
+            break;
+        }
+    }
+
+    return DefWindowProcA(hwnd, msg, wparam, lparam);
+}
+
+static void test_thick_child_size(HWND parentWindow) {
+    BOOL success;
+    RECT childRect;
+    HWND childWindow;
+    LONG childWidth;
+    LONG childHeight;
+    WNDCLASSA cls;
+    LPCTSTR className = "THICK_CHILD_CLASS";
+    LONG style = WS_CHILD | WS_VISIBLE | WS_THICKFRAME;
+    LONG exStyle = 0;
+    int expectedSize = 2*getExpectedThickChildInc();
+
+
+    cls.style = 0;
+    cls.lpfnWndProc = test_thick_child_size_winproc;
+    cls.cbClsExtra = 0;
+    cls.cbWndExtra = 0;
+    cls.hInstance = GetModuleHandleA(0);
+    cls.hIcon = 0;
+    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;
+
+    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());
+
+    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;
+
+    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);
+
+
+    SetLastError(0xdeadbeef);
+    success = DestroyWindow(childWindow);
+    ok(success,"DestroyWindow call failed, error: %u\n", GetLastError());
+    ok(UnregisterClass(className, GetModuleHandleA(0)),"UnregisterClass call failed\n");
+}
+
+
 START_TEST(win)
 {
     HMODULE user32 = GetModuleHandleA( "user32.dll" );
@@ -5153,6 +5285,7 @@ START_TEST(win)
     our_pid = GetWindowThreadProcessId(hwndMain, NULL);
 
     /* Add the tests below this line */
+    test_thick_child_size(hwndMain);
     test_fullscreen();
     test_hwnd_message();
     test_nonclient_area(hwndMain);
-- 
1.6.0.4




More information about the wine-patches mailing list