From: Zebediah Figura Subject: [PATCH 3/5] user32/tests: Add tests for maximizing and minimizing child windows. Message-Id: <20190210190015.4039-3-z.figura12@gmail.com> Date: Sun, 10 Feb 2019 13:00:13 -0600 In-Reply-To: <20190210190015.4039-1-z.figura12@gmail.com> References: <20190210190015.4039-1-z.figura12@gmail.com> Signed-off-by: Zebediah Figura --- dlls/user32/tests/win.c | 131 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index aa350aac01..2c2c81463f 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -6849,6 +6849,136 @@ static void test_ShowWindow_owned(HWND hwndMain) DestroyWindow(hwnd); } +static void test_ShowWindow_child(HWND hwndMain) +{ + RECT rect, orig, expect; + BOOL ret; + HWND hwnd, hwnd2; + LONG style; + POINT pt = {0}; + + SetRect(&orig, 20, 20, 210, 110); + hwnd = CreateWindowA("MainWindowClass", "child", WS_CAPTION | WS_SYSMENU | + WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CHILD, + orig.left, orig.top, orig.right - orig.left, + orig.bottom - orig.top, hwndMain, 0, 0, NULL); + ok(!!hwnd, "failed to create window, error %u\n", GetLastError()); + hwnd2 = CreateWindowA("MainWindowClass", "child2", WS_CAPTION | WS_SYSMENU | + WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CHILD | WS_VISIBLE, + orig.left, orig.top, orig.right - orig.left, + orig.bottom - orig.top, hwndMain, 0, 0, NULL); + ok(!!hwnd2, "failed to create window, error %u\n", GetLastError()); + + ClientToScreen(hwndMain, &pt); + OffsetRect(&orig, pt.x, pt.y); + + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(!(style & WS_VISIBLE), "window should not be visible\n"); + ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); + ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); + GetWindowRect(hwnd, &rect); + ok(EqualRect(&orig, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&orig), wine_dbgstr_rect(&rect)); + + ret = ShowWindow(hwnd, SW_SHOW); + ok(!ret, "wrong ret %d\n", ret); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(style & WS_VISIBLE, "window should be visible\n"); + ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); + ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); + GetWindowRect(hwnd, &rect); + ok(EqualRect(&orig, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&orig), wine_dbgstr_rect(&rect)); + + ret = ShowWindow(hwnd, SW_MINIMIZE); + ok(ret, "wrong ret %d\n", ret); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(style & WS_VISIBLE, "window should be visible\n"); + ok(style & WS_MINIMIZE, "window should be minimized\n"); + ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); + GetWindowRect(hwnd, &rect); + GetClientRect(hwndMain, &expect); + SetRect(&expect, 0, expect.bottom - GetSystemMetrics(SM_CYMINIMIZED), + GetSystemMetrics(SM_CXMINIMIZED), expect.bottom); + OffsetRect(&expect, pt.x, pt.y); + todo_wine + ok(EqualRect(&expect, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&expect), wine_dbgstr_rect(&rect)); + /* shouldn't be able to resize minimized windows */ + ret = SetWindowPos(hwnd, 0, 0, 0, 200, 200, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); + ok(ret, "wrong ret %d\n", ret); + GetWindowRect(hwnd, &rect); + todo_wine + ok(EqualRect(&expect, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&expect), wine_dbgstr_rect(&rect)); + + /* multiple minimized children also stack; here the parent is too small to + * fit more than one per row */ + OffsetRect(&expect, 0, -GetSystemMetrics(SM_CYMINIMIZED)); + ret = ShowWindow(hwnd2, SW_MINIMIZE); + ok(ret, "wrong ret %d\n", ret); + style = GetWindowLongA(hwnd2, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(style & WS_VISIBLE, "window should be visible\n"); + ok(style & WS_MINIMIZE, "window should be minimized\n"); + ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); + GetWindowRect(hwnd2, &rect); + todo_wine + ok(EqualRect(&expect, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&expect), wine_dbgstr_rect(&rect)); + + ShowWindow(hwnd, SW_RESTORE); + ok(ret, "wrong ret %d\n", ret); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(style & WS_VISIBLE, "window should be visible\n"); + ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); + ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); + GetWindowRect(hwnd, &rect); + ok(EqualRect(&orig, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&orig), wine_dbgstr_rect(&rect)); + + ShowWindow(hwnd, SW_MAXIMIZE); + ok(ret, "wrong ret %d\n", ret); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(style & WS_VISIBLE, "window should be visible\n"); + ok(!(style & WS_MINIMIZE), "window should be minimized\n"); + ok(style & WS_MAXIMIZE, "window should not be maximized\n"); + GetWindowRect(hwnd, &rect); + GetClientRect(hwndMain, &expect); + AdjustWindowRectEx(&expect, GetWindowLongA(hwnd, GWL_STYLE) & ~WS_BORDER, + 0, GetWindowLongA(hwnd, GWL_EXSTYLE)); + OffsetRect(&expect, pt.x, pt.y); + ok(EqualRect(&expect, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&expect), wine_dbgstr_rect(&rect)); + /* maximized windows can be resized */ + ret = SetWindowPos(hwnd, 0, 300, 300, 200, 200, SWP_NOACTIVATE | SWP_NOZORDER); + ok(ret, "wrong ret %d\n", ret); + GetWindowRect(hwnd, &rect); + SetRect(&expect, 300, 300, 500, 500); + OffsetRect(&expect, pt.x, pt.y); + ok(EqualRect(&expect, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&expect), wine_dbgstr_rect(&rect)); + + ShowWindow(hwnd, SW_RESTORE); + ok(ret, "wrong ret %d\n", ret); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_DISABLED), "window should not be disabled\n"); + ok(style & WS_VISIBLE, "window should be visible\n"); + ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); + ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); + GetWindowRect(hwnd, &rect); + ok(EqualRect(&orig, &rect), "expected %s, got %s\n", + wine_dbgstr_rect(&orig), wine_dbgstr_rect(&rect)); + + DestroyWindow(hwnd2); + DestroyWindow(hwnd); +} + static DWORD CALLBACK enablewindow_thread(LPVOID arg) { HWND hwnd = arg; @@ -11214,6 +11344,7 @@ START_TEST(win) test_set_window_style(); test_ShowWindow(); test_ShowWindow_owned(hwndMain); + test_ShowWindow_child(hwndMain); test_EnableWindow(); test_gettext(); test_GetUpdateRect(); -- 2.20.1