Zhiyi Zhang : user32/tests: Test that monitor enumeration is not affected by window stations and desktops.
Alexandre Julliard
julliard at winehq.org
Tue Dec 8 15:38:14 CST 2020
Module: wine
Branch: master
Commit: c84fd7cd861d83c9afe63a3255c90693b2ee2e66
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c84fd7cd861d83c9afe63a3255c90693b2ee2e66
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Tue Dec 8 16:12:26 2020 +0800
user32/tests: Test that monitor enumeration is not affected by window stations and desktops.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/monitor.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index 2ca6e9ece84..5e4cc9d154f 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -1510,10 +1510,21 @@ static BOOL CALLBACK test_EnumDisplayMonitors_invalid_handle_cb(HMONITOR monitor
return TRUE;
}
+static BOOL CALLBACK test_EnumDisplayMonitors_count(HMONITOR monitor, HDC hdc, LPRECT rect,
+ LPARAM lparam)
+{
+ INT *count = (INT *)lparam;
+ ++(*count);
+ return TRUE;
+}
+
static void test_EnumDisplayMonitors(void)
{
+ static const DWORD DESKTOP_ALL_ACCESS = 0x01ff;
+ HWINSTA winstation, old_winstation;
+ HDESK desktop, old_desktop;
+ INT count, old_count;
DWORD error;
- INT count;
BOOL ret;
ret = EnumDisplayMonitors(NULL, NULL, test_EnumDisplayMonitors_normal_cb, 0);
@@ -1534,6 +1545,45 @@ static void test_EnumDisplayMonitors(void)
else
ok(ret, "EnumDisplayMonitors failed.\n");
ok(error == 0xdeadbeef, "Expected error %#x, got %#x.\n", 0xdeadbeef, error);
+
+ /* Test that monitor enumeration is not affected by window stations and desktops */
+ old_winstation = GetProcessWindowStation();
+ old_desktop = GetThreadDesktop(GetCurrentThreadId());
+ old_count = GetSystemMetrics(SM_CMONITORS);
+
+ count = 0;
+ ret = EnumDisplayMonitors(NULL, NULL, test_EnumDisplayMonitors_count, (LPARAM)&count);
+ ok(ret, "EnumDisplayMonitors failed, error %#x.\n", GetLastError());
+ ok(count == old_count, "Expected %d, got %d.\n", old_count, count);
+
+ winstation = CreateWindowStationW(NULL, 0, WINSTA_ALL_ACCESS, NULL);
+ ok(!!winstation && winstation != old_winstation, "CreateWindowStationW failed, error %#x.\n", GetLastError());
+ ret = SetProcessWindowStation(winstation);
+ ok(ret, "SetProcessWindowStation failed, error %#x.\n", GetLastError());
+ ok(winstation == GetProcessWindowStation(), "Expected %p, got %p.\n", GetProcessWindowStation(), winstation);
+
+ desktop = CreateDesktopW(L"test_desktop", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL);
+ ok(!!desktop && desktop != old_desktop, "CreateDesktopW failed, error %#x.\n", GetLastError());
+ ret = SetThreadDesktop(desktop);
+ ok(ret, "SetThreadDesktop failed, error %#x.\n", GetLastError());
+ ok(desktop == GetThreadDesktop(GetCurrentThreadId()), "Expected %p, got %p.\n",
+ GetThreadDesktop(GetCurrentThreadId()), desktop);
+
+ count = GetSystemMetrics(SM_CMONITORS);
+ ok(count == old_count, "Expected %d, got %d.\n", old_count, count);
+ count = 0;
+ ret = EnumDisplayMonitors(NULL, NULL, test_EnumDisplayMonitors_count, (LPARAM)&count);
+ ok(ret, "EnumDisplayMonitors failed, error %#x.\n", GetLastError());
+ ok(count == old_count, "Expected %d, got %d.\n", old_count, count);
+
+ ret = SetProcessWindowStation(old_winstation);
+ ok(ret, "SetProcessWindowStation failed, error %#x.\n", GetLastError());
+ ret = SetThreadDesktop(old_desktop);
+ ok(ret, "SetThreadDesktop failed, error %#x.\n", GetLastError());
+ ret = CloseDesktop(desktop);
+ ok(ret, "CloseDesktop failed, error %#x.\n", GetLastError());
+ ret = CloseWindowStation(winstation);
+ ok(ret, "CloseWindowStation failed, error %#x.\n", GetLastError());
}
static void test_QueryDisplayConfig_result(UINT32 flags,
More information about the wine-cvs
mailing list