[PATCH v2 2/6] user32/tests: Test that monitor enumeration is not affected by window stations and desktops.
Zhiyi Zhang
zzhang at codeweavers.com
Tue Dec 8 02:12:26 CST 2020
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
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,
--
2.27.0
More information about the wine-devel
mailing list