Zhiyi Zhang : user32/tests: Test that monitor handles are user32 handles.

Alexandre Julliard julliard at winehq.org
Tue Dec 8 15:38:14 CST 2020


Module: wine
Branch: master
Commit: bc4d22b3dcb48d6e5d0be467ebfd6f2c7506f347
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bc4d22b3dcb48d6e5d0be467ebfd6f2c7506f347

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Tue Dec  8 16:12:15 2020 +0800

user32/tests: Test that monitor handles are user32 handles.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/monitor.c | 81 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index c3f5d1eddcb..2ca6e9ece84 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -1862,6 +1862,86 @@ static void test_display_config(void)
     test_DisplayConfigGetDeviceInfo();
 }
 
+static BOOL CALLBACK test_handle_proc(HMONITOR full_monitor, HDC hdc, LPRECT rect, LPARAM lparam)
+{
+    MONITORINFO monitor_info = {sizeof(monitor_info)};
+    HMONITOR monitor;
+    BOOL ret;
+
+#ifdef _WIN64
+    if ((ULONG_PTR)full_monitor >> 32)
+        monitor = full_monitor;
+    else
+        monitor = (HMONITOR)((ULONG_PTR)full_monitor | ((ULONG_PTR)~0u << 32));
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(ret, "GetMonitorInfoW failed, error %#x.\n", GetLastError());
+
+    monitor = (HMONITOR)((ULONG_PTR)full_monitor & 0xffffffff);
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(ret, "GetMonitorInfoW failed, error %#x.\n", GetLastError());
+
+    monitor = (HMONITOR)(((ULONG_PTR)full_monitor & 0xffffffff) | ((ULONG_PTR)0x1234 << 32));
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(ret, "GetMonitorInfoW failed, error %#x.\n", GetLastError());
+
+    monitor = (HMONITOR)((ULONG_PTR)full_monitor & 0xffff);
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    todo_wine ok(!ret, "GetMonitorInfoW succeeded.\n");
+    todo_wine ok(GetLastError() == ERROR_INVALID_MONITOR_HANDLE, "Expected error code %#x, got %#x.\n",
+            ERROR_INVALID_MONITOR_HANDLE, GetLastError());
+
+    monitor = (HMONITOR)(((ULONG_PTR)full_monitor & 0xffff) | ((ULONG_PTR)0x9876 << 16));
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(!ret, "GetMonitorInfoW succeeded.\n");
+    ok(GetLastError() == ERROR_INVALID_MONITOR_HANDLE, "Expected error code %#x, got %#x.\n",
+            ERROR_INVALID_MONITOR_HANDLE, GetLastError());
+
+    monitor = (HMONITOR)(((ULONG_PTR)full_monitor & 0xffff) | ((ULONG_PTR)0x12345678 << 16));
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(!ret, "GetMonitorInfoW succeeded.\n");
+    ok(GetLastError() == ERROR_INVALID_MONITOR_HANDLE, "Expected error code %#x, got %#x.\n",
+            ERROR_INVALID_MONITOR_HANDLE, GetLastError());
+#else
+    if ((ULONG_PTR)full_monitor >> 16)
+        monitor = full_monitor;
+    else
+        monitor = (HMONITOR)((ULONG_PTR)full_monitor | ((ULONG_PTR)~0u << 16));
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    todo_wine_if(((ULONG_PTR)full_monitor >> 16) == 0)
+    ok(ret, "GetMonitorInfoW failed, error %#x.\n", GetLastError());
+
+    monitor = (HMONITOR)((ULONG_PTR)full_monitor & 0xffff);
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(ret, "GetMonitorInfoW failed, error %#x.\n", GetLastError());
+
+    monitor = (HMONITOR)(((ULONG_PTR)full_monitor & 0xffff) | ((ULONG_PTR)0x1234 << 16));
+    SetLastError(0xdeadbeef);
+    ret = GetMonitorInfoW(monitor, &monitor_info);
+    ok(!ret, "GetMonitorInfoW succeeded.\n");
+    ok(GetLastError() == ERROR_INVALID_MONITOR_HANDLE, "Expected error code %#x, got %#x.\n",
+            ERROR_INVALID_MONITOR_HANDLE, GetLastError());
+#endif
+
+    return TRUE;
+}
+
+static void test_handles(void)
+{
+    BOOL ret;
+
+    /* Test that monitor handles are user32 handles */
+    ret = EnumDisplayMonitors(NULL, NULL, test_handle_proc, 0);
+    ok(ret, "EnumDisplayMonitors failed, error %#x.\n", GetLastError());
+}
+
 START_TEST(monitor)
 {
     init_function_pointers();
@@ -1871,4 +1951,5 @@ START_TEST(monitor)
     test_monitors();
     test_work_area();
     test_display_config();
+    test_handles();
 }




More information about the wine-cvs mailing list