From: Patrick Hibbs Subject: [PATCH 6/6] wtsapi32/tests: Add test for WTSRegisterSessionNotificationEx(). Message-Id: <20190713230002.20340-6-hibbsncc1701@yahoo.com> Date: Sat, 13 Jul 2019 19:00:02 -0400 In-Reply-To: <20190713230002.20340-1-hibbsncc1701@yahoo.com> References: <20190713230002.20340-1-hibbsncc1701@yahoo.com> Signed-off-by: Patrick Hibbs --- dlls/wtsapi32/tests/wtsapi.c | 72 ++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/dlls/wtsapi32/tests/wtsapi.c b/dlls/wtsapi32/tests/wtsapi.c index 67f56bbd7f..39f718e29b 100644 --- a/dlls/wtsapi32/tests/wtsapi.c +++ b/dlls/wtsapi32/tests/wtsapi.c @@ -22,9 +22,12 @@ #include #include #include +#include #include "wine/test.h" +static const CHAR testwindow_class[] = "testwindow"; + static void test_WTSEnumerateProcessesW(void) { BOOL found = FALSE, ret; @@ -115,9 +118,78 @@ static void test_WTSQueryUserToken(void) ok(GetLastError()==ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got: %d\n", GetLastError()); } +static LRESULT CALLBACK testwindow_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + /* TODO: Actually check for WM_WTSSESSION_CHANGE messages. + */ + return DefWindowProcA(hwnd, msg, wparam, lparam); +} + +static void register_testwindow_class(void) +{ + WNDCLASSEXA cls; + + ZeroMemory(&cls, sizeof(cls)); + cls.cbSize = sizeof(cls); + cls.style = 0; + cls.lpfnWndProc = testwindow_wndproc; + cls.hInstance = NULL; + cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); + cls.hbrBackground = (HBRUSH) COLOR_WINDOW; + cls.lpszClassName = testwindow_class; + + RegisterClassExA(&cls); +} + +static void test_WTSRegisterSessionNotificationEx(void) +{ + BOOL ret; + HWND hwnd0; + HWND hwnd1; + + register_testwindow_class(); + + hwnd0 = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST, + testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, + NULL, NULL, NULL, NULL); + ok(hwnd0 != NULL, "couldn't create window\n"); + + hwnd1 = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST, + testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, + NULL, NULL, NULL, NULL); + ok(hwnd1 != NULL, "couldn't create window\n"); + + ret = WTSRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd0, 0); + ok(ret, "WTSRegisterSessionNotificationEx: Initial call, no registered windows.\n"); + ret = WTSRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd0, 0); + ok(ret, "WTSRegisterSessionNotificationEx: Re-register a window.\n"); + ret = WTSRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd0, 1); + ok(ret, + "WTSRegisterSessionNotificationEx: Re-register a window with diff flags.\n"); + ret = WTSRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd1, 0); + ok(ret, "WTSRegisterSessionNotificationEx: Register additional window.\n"); + ret = WTSRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd1, 0); + ok(ret, "WTSRegisterSessionNotificationEx: Re-register window2.\n"); + ret = WTSRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd1, 1); + ok(ret, + "WTSRegisterSessionNotificationEx: Re-register window2 with diff flags.\n"); + ret = WTSUnRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd0); + ok(ret, "WTSUnRegisterSessionNotificationEx: Initial call with first window.\n"); + ret = WTSUnRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd0); + ok(ret, "WTSUnRegisterSessionNotificationEx: Repeat call with first window.\n"); + ret = WTSUnRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd1); + ok(ret, "WTSUnRegisterSessionNotificationEx: Initial call with second window.\n"); + ret = WTSUnRegisterSessionNotificationEx(WTS_CURRENT_SERVER_HANDLE, hwnd1); + ok(ret, "WTSUnRegisterSessionNotificationEx: Repeat call with second window.\n"); + + DestroyWindow(hwnd0); + DestroyWindow(hwnd1); +} + START_TEST (wtsapi) { test_WTSEnumerateProcessesW(); test_WTSQuerySessionInformationW(); test_WTSQueryUserToken(); + test_WTSRegisterSessionNotificationEx(); } -- 2.22.0