Florian Köberle : user32/tests: Test size and minmax of WS_THICKFRAME child.
Alexandre Julliard
julliard at winehq.org
Wed Nov 19 08:35:23 CST 2008
Module: wine
Branch: master
Commit: c6adf31841ea7180fc01229ae21e7251761ef174
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c6adf31841ea7180fc01229ae21e7251761ef174
Author: Florian Köberle <florian at fkoeberle.de>
Date: Wed Nov 19 11:07:00 2008 +0100
user32/tests: Test size and minmax of WS_THICKFRAME child.
---
dlls/user32/tests/win.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 134 insertions(+), 0 deletions(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 63eeb25..5884ce2 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -5121,6 +5121,139 @@ static void test_fullscreen(void)
UnregisterClass("fullscreen_class", GetModuleHandle(0));
}
+static BOOL test_thick_child_got_minmax;
+
+static int getExpectedThickChildInc(void)
+{
+ 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 +5286,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);
More information about the wine-cvs
mailing list