Zhiyi Zhang : setupapi/tests: Add display device interface tests.
Alexandre Julliard
julliard at winehq.org
Mon Sep 20 16:26:20 CDT 2021
Module: wine
Branch: master
Commit: 5030f4cf26c31bc709d6565182b51af1165953a6
URL: https://source.winehq.org/git/wine.git/?a=commit;h=5030f4cf26c31bc709d6565182b51af1165953a6
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Mon Sep 20 08:56:16 2021 +0800
setupapi/tests: Add display device interface tests.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/setupapi/tests/misc.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/dlls/setupapi/tests/misc.c b/dlls/setupapi/tests/misc.c
index f16f310b3f7..10ea7c0cba8 100644
--- a/dlls/setupapi/tests/misc.c
+++ b/dlls/setupapi/tests/misc.c
@@ -28,6 +28,9 @@
#include "winnls.h"
#include "winuser.h"
#include "winreg.h"
+#include "devguid.h"
+#include "initguid.h"
+#include "ntddvdeo.h"
#include "setupapi.h"
#include "cfgmgr32.h"
@@ -819,6 +822,87 @@ static void test_CM_Get_Version(void)
ok(ret == 0x0400, "got version %#x\n", ret);
}
+#define check_device_interface(a, b) _check_device_interface(__LINE__, a, b)
+static void _check_device_interface(int line, const char *instance_id, const GUID *guid)
+{
+ SP_DEVICE_INTERFACE_DATA iface_data = {sizeof(iface_data)};
+ SP_DEVINFO_DATA device_data = {sizeof(device_data)};
+ HDEVINFO devinfo;
+ BOOL ret;
+
+ devinfo = SetupDiGetClassDevsA(guid, instance_id, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
+ ret = SetupDiEnumDeviceInfo(devinfo, 0, &device_data);
+ ok_(__FILE__, line)(ret || broken(!ret) /* <= Win7 */,
+ "SetupDiEnumDeviceInfo failed, error %u.\n", GetLastError());
+ if (!ret)
+ {
+ SetupDiDestroyDeviceInfoList(devinfo);
+ return;
+ }
+ ret = SetupDiEnumDeviceInterfaces(devinfo, &device_data, guid, 0, &iface_data);
+ ok_(__FILE__, line)(ret, "SetupDiEnumDeviceInterfaces failed, error %u.\n", GetLastError());
+ ok_(__FILE__, line)(IsEqualGUID(&iface_data.InterfaceClassGuid, guid),
+ "Expected guid %s, got %s.\n", wine_dbgstr_guid(guid),
+ wine_dbgstr_guid(&iface_data.InterfaceClassGuid));
+
+ SetupDiDestroyDeviceInfoList(devinfo);
+}
+
+static void test_device_interfaces(void)
+{
+ SP_DEVICE_INTERFACE_DATA iface_data = {sizeof(iface_data)};
+ SP_DEVINFO_DATA device_data = {sizeof(device_data)};
+ char instance_id[MAX_DEVICE_ID_LEN];
+ DWORD device_idx = 0, size, error;
+ HDEVINFO devinfo;
+ BOOL ret;
+
+ /* GPUs */
+ devinfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_DISPLAY, NULL, NULL, DIGCF_PRESENT);
+ ok(devinfo != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsW failed, error %u.\n", GetLastError());
+ while ((ret = SetupDiEnumDeviceInfo(devinfo, device_idx, &device_data)))
+ {
+ ret = SetupDiGetDeviceInstanceIdA(devinfo, &device_data, instance_id,
+ ARRAY_SIZE(instance_id), &size);
+ ok(ret, "SetupDiGetDeviceInstanceIdA failed, error %u.\n", GetLastError());
+
+ winetest_push_context("GPU %d", device_idx);
+
+ check_device_interface(instance_id, &GUID_DEVINTERFACE_DISPLAY_ADAPTER);
+ check_device_interface(instance_id, &GUID_DISPLAY_DEVICE_ARRIVAL);
+
+ winetest_pop_context();
+ ++device_idx;
+ }
+ error = GetLastError();
+ ok(error == ERROR_NO_MORE_ITEMS, "Expected error %u, got %u.\n", ERROR_NO_MORE_ITEMS, error);
+ ok(device_idx > 0, "Expected at least one GPU.\n");
+ SetupDiDestroyDeviceInfoList(devinfo);
+
+ /* Monitors */
+ device_idx = 0;
+ devinfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_MONITOR, L"DISPLAY", NULL, DIGCF_PRESENT);
+ ok(devinfo != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsW failed, error %u.\n", GetLastError());
+ while ((ret = SetupDiEnumDeviceInfo(devinfo, device_idx, &device_data)))
+ {
+ ret = SetupDiGetDeviceInstanceIdA(devinfo, &device_data, instance_id,
+ ARRAY_SIZE(instance_id), &size);
+ ok(ret, "SetupDiGetDeviceInstanceIdA failed, error %u.\n", GetLastError());
+
+ winetest_push_context("Monitor %d", device_idx);
+
+ check_device_interface(instance_id, &GUID_DEVINTERFACE_MONITOR);
+
+ winetest_pop_context();
+ ++device_idx;
+ }
+ error = GetLastError();
+ ok(error == ERROR_NO_MORE_ITEMS, "Expected error %u, got %u.\n", ERROR_NO_MORE_ITEMS, error);
+ ok(device_idx > 0 || broken(device_idx == 0) /* w7u_2qxl TestBot */,
+ "Expected at least one monitor.\n");
+ SetupDiDestroyDeviceInfoList(devinfo);
+}
+
START_TEST(misc)
{
HMODULE hsetupapi = GetModuleHandleA("setupapi.dll");
@@ -841,4 +925,5 @@ START_TEST(misc)
test_defaultcallback();
test_SetupLogError();
test_CM_Get_Version();
+ test_device_interfaces();
}
More information about the wine-cvs
mailing list