From f8cd9ebd144ba0e84b340eaf832a19be8acdef85 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 17 Oct 2011 16:35:22 +0000 Subject: [PATCH] [user32_apitest] - Add some tests for the messages that are sent when SPI_SETNONCLIENTMETRICS is used svn path=/trunk/; revision=54180 --- rostests/apitests/user32/CMakeLists.txt | 1 + .../apitests/user32/SystemParametersInfo.c | 126 ++++++++++++++++++ rostests/apitests/user32/helper.c | 5 +- rostests/apitests/user32/testlist.c | 2 + .../apitests/user32/user32_apitest.rbuild | 1 + 5 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 rostests/apitests/user32/SystemParametersInfo.c diff --git a/rostests/apitests/user32/CMakeLists.txt b/rostests/apitests/user32/CMakeLists.txt index ed105733211..582902e6895 100644 --- a/rostests/apitests/user32/CMakeLists.txt +++ b/rostests/apitests/user32/CMakeLists.txt @@ -16,6 +16,7 @@ list(APPEND SOURCE ScrollWindowEx.c SetCursorPos.c SetActiveWindow.c + SystemParametersInfo.c TrackMouseEvent.c WndProc.c testlist.c diff --git a/rostests/apitests/user32/SystemParametersInfo.c b/rostests/apitests/user32/SystemParametersInfo.c new file mode 100644 index 00000000000..b0bfe366eda --- /dev/null +++ b/rostests/apitests/user32/SystemParametersInfo.c @@ -0,0 +1,126 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for SystemParametersInfo function family + * PROGRAMMERS: Giannis Adamopoulos + */ + +#include +#include +#include +#include "helper.h" +#include + +HWND hWnd1, hWnd2; + +/* FIXME: test for HWND_TOP, etc...*/ +static int get_iwnd(HWND hWnd) +{ + if(hWnd == hWnd1) return 1; + else if(hWnd == hWnd2) return 2; + else return 0; +} + +LRESULT CALLBACK SysParamsTestProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + int iwnd = get_iwnd(hWnd); + + if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) + return DefWindowProc(hWnd, message, wParam, lParam); + + switch(message) + { + case WM_GETICON : + case WM_SETICON: + break; + case WM_WINDOWPOSCHANGING: + case WM_WINDOWPOSCHANGED: + { + WINDOWPOS* pwp = (WINDOWPOS*)lParam; + ok(wParam==0,"expected wParam=0\n"); + record_message(iwnd, message, SENT, get_iwnd(pwp->hwndInsertAfter), pwp->flags); + break; + } + default: + record_message(iwnd, message, SENT, 0,0); + } + return DefWindowProc(hWnd, message, wParam, lParam); +} + +static void FlushMessages() +{ + MSG msg; + + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) + { + int iwnd = get_iwnd(msg.hwnd); + if(!(msg.message > WM_USER || !iwnd || IsDWmMsg(msg.message) || IseKeyMsg(msg.message))) + record_message(iwnd, msg.message, POST,0,0); + DispatchMessageA( &msg ); + } +} + +MSG_ENTRY NcMetricsChange_chain[]={ + {2,WM_WINDOWPOSCHANGING, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW}, + {2,WM_GETMINMAXINFO}, + {2,WM_NCCALCSIZE}, + {2,WM_WINDOWPOSCHANGED, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW | SWP_NOCLIENTSIZE}, + {1,WM_WINDOWPOSCHANGING, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW}, + {1,WM_GETMINMAXINFO}, + {1,WM_NCCALCSIZE}, + {1,WM_WINDOWPOSCHANGED, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW | SWP_NOCLIENTSIZE}, + {0,0}}; + +MSG_ENTRY CaptionHeight_chain[]={ + {2,WM_WINDOWPOSCHANGING, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW}, + {2,WM_GETMINMAXINFO}, + {2,WM_NCCALCSIZE}, + {2,WM_WINDOWPOSCHANGED, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW | SWP_NOCLIENTSIZE}, + {2,WM_MOVE}, + {1,WM_WINDOWPOSCHANGING, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW}, + {1,WM_GETMINMAXINFO}, + {1,WM_NCCALCSIZE}, + {1,WM_WINDOWPOSCHANGED, SENT, 0, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW | SWP_NOCLIENTSIZE}, + {1,WM_MOVE}, + {0,0}}; + +static void Test_NonClientMetrics() +{ + NONCLIENTMETRICS NonClientMetrics; + + SetCursorPos(0,0); + + NonClientMetrics.cbSize = sizeof(NONCLIENTMETRICS); + SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &NonClientMetrics, 0); + FlushMessages(); + COMPARE_CACHE(empty_chain); + SystemParametersInfo(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &NonClientMetrics, 0); + FlushMessages(); + COMPARE_CACHE(NcMetricsChange_chain); + + NonClientMetrics.iCaptionHeight += 1; + SystemParametersInfo(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &NonClientMetrics, 0); + FlushMessages(); + COMPARE_CACHE(CaptionHeight_chain); + + NonClientMetrics.iCaptionHeight -= 1; + SystemParametersInfo(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &NonClientMetrics, 0); + FlushMessages(); + COMPARE_CACHE(CaptionHeight_chain); +} + +START_TEST(SystemParametersInfo) +{ + RegisterSimpleClass(SysParamsTestProc, L"sysparamstest"); + hWnd1 = CreateWindowW(L"sysparamstest", L"sysparamstest", WS_OVERLAPPEDWINDOW, + 20, 20, 300, 300, NULL, NULL, 0, NULL); + + hWnd2 = CreateWindowW(L"sysparamstest", L"sysparamstest", WS_OVERLAPPEDWINDOW, + 200, 200, 300, 300, NULL, NULL, 0, NULL); + + Test_NonClientMetrics(); + + DestroyWindow(hWnd1); + DestroyWindow(hWnd2); + UnregisterClassW(L"sysparamstest", 0); +} \ No newline at end of file diff --git a/rostests/apitests/user32/helper.c b/rostests/apitests/user32/helper.c index ac91023d476..7899913e490 100644 --- a/rostests/apitests/user32/helper.c +++ b/rostests/apitests/user32/helper.c @@ -45,6 +45,9 @@ static char* get_msg_name(UINT msg) case WM_SYSTIMER: return "WM_SYSTIMER"; case WM_GETMINMAXINFO: return "WM_GETMINMAXINFO"; case WM_NCCALCSIZE: return "WM_NCCALCSIZE"; + case WM_SETTINGCHANGE: return "WM_SETTINGCHANGE"; + case WM_GETICON: return "WM_GETICON"; + case WM_SETICON: return "WM_SETICON"; default: return NULL; } } @@ -204,4 +207,4 @@ ATOM RegisterSimpleClass(WNDPROC lpfnWndProc, LPCWSTR lpszClassName) wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszClassName = lpszClassName; return RegisterClassExW(&wcex); -} \ No newline at end of file +} diff --git a/rostests/apitests/user32/testlist.c b/rostests/apitests/user32/testlist.c index 8218a91714e..3ee4c9bb6cb 100644 --- a/rostests/apitests/user32/testlist.c +++ b/rostests/apitests/user32/testlist.c @@ -16,6 +16,7 @@ extern void func_DeferWindowPos(void); extern void func_GetKeyState(void); extern void func_SetCursorPos(void); extern void func_SetActiveWindow(void); +extern void func_SystemParametersInfo(void); extern void func_TrackMouseEvent(void); extern void func_WndProc(void); @@ -32,6 +33,7 @@ const struct test winetest_testlist[] = { "GetKeyState", func_GetKeyState }, { "SetCursorPos", func_SetCursorPos }, { "SetActiveWindow", func_SetActiveWindow }, + { "SystemParametersInfo", func_SystemParametersInfo }, { "TrackMouseEvent", func_TrackMouseEvent }, { "WndProc", func_WndProc }, { 0, 0 } diff --git a/rostests/apitests/user32/user32_apitest.rbuild b/rostests/apitests/user32/user32_apitest.rbuild index 3200220639c..e75da8627e0 100644 --- a/rostests/apitests/user32/user32_apitest.rbuild +++ b/rostests/apitests/user32/user32_apitest.rbuild @@ -22,6 +22,7 @@ DeferWindowPos.c SetActiveWindow.c SetCursorPos.c + SystemParametersInfo.c TrackMouseEvent.c WndProc.c