[PATCH v2 6/6] wtsapi32/tests: Add test for WTSRegisterSessionNotification().
Patrick Hibbs
hibbsncc1701 at gmail.com
Sat Jul 13 19:21:04 CDT 2019
From: Patrick Hibbs <hibbsncc1701 at yahoo.com>
Signed-off-by: Patrick Hibbs <hibbsncc1701 at gmail.com>
---
v2: Fix test for Windows XP.
---
dlls/wtsapi32/tests/wtsapi.c | 87 ++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/dlls/wtsapi32/tests/wtsapi.c b/dlls/wtsapi32/tests/wtsapi.c
index 67f56bbd7f..1686c077ea 100644
--- a/dlls/wtsapi32/tests/wtsapi.c
+++ b/dlls/wtsapi32/tests/wtsapi.c
@@ -22,9 +22,12 @@
#include <winbase.h>
#include <winternl.h>
#include <wtsapi32.h>
+#include <windows.h>
#include "wine/test.h"
+static const CHAR testwindow_class[] = "testwindow";
+
static void test_WTSEnumerateProcessesW(void)
{
BOOL found = FALSE, ret;
@@ -115,9 +118,93 @@ 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);
+}
+
+typedef BOOL (WINAPI *RegFunc)(HWND, DWORD);
+typedef BOOL (WINAPI *UnRegFunc)(HWND);
+
+static void test_WTSRegisterSessionNotification(void)
+{
+ BOOL ret;
+ HWND hwnd0;
+ HWND hwnd1;
+ HANDLE lib;
+ RegFunc regFunc;
+ UnRegFunc unRegFunc;
+
+ 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");
+
+ lib = LoadLibraryA("WTSAPI32.DLL");
+ if (lib != NULL)
+ {
+ regFunc = (RegFunc) GetProcAddress(lib, "WTSRegisterSessionNotification");
+ unRegFunc = (UnRegFunc) GetProcAddress(lib, "WTSUnRegisterSessionNotification");
+ if (regFunc && unRegFunc)
+ {
+ ret = regFunc(hwnd0, 0);
+ ok(ret, "WTSRegisterSessionNotification: Initial call, no registered windows.\n");
+ ret = regFunc(hwnd0, 0);
+ ok(ret, "WTSRegisterSessionNotification: Re-register a window.\n");
+ ret = regFunc(hwnd0, 1);
+ ok(ret,
+ "WTSRegisterSessionNotification: Re-register a window with diff flags.\n");
+ ret = regFunc(hwnd1, 0);
+ ok(ret, "WTSRegisterSessionNotification: Register additional window.\n");
+ ret = regFunc(hwnd1, 0);
+ ok(ret, "WTSRegisterSessionNotification: Re-register window2.\n");
+ ret = regFunc(hwnd1, 1);
+ ok(ret,
+ "WTSRegisterSessionNotification: Re-register window2 with diff flags.\n");
+ ret = unRegFunc(hwnd0);
+ ok(ret, "WTSUnRegisterSessionNotification: Initial call with first window.\n");
+ ret = unRegFunc(hwnd0);
+ ok(ret, "WTSUnRegisterSessionNotification: Repeat call with first window.\n");
+ ret = unRegFunc(hwnd1);
+ ok(ret, "WTSUnRegisterSessionNotification: Initial call with second window.\n");
+ ret = unRegFunc(hwnd1);
+ ok(ret, "WTSUnRegisterSessionNotification: Repeat call with second window.\n");
+ }
+ }
+
+ DestroyWindow(hwnd0);
+ DestroyWindow(hwnd1);
+}
+
START_TEST (wtsapi)
{
test_WTSEnumerateProcessesW();
test_WTSQuerySessionInformationW();
test_WTSQueryUserToken();
+ test_WTSRegisterSessionNotification();
}
--
2.22.0
More information about the wine-devel
mailing list