Zhiyi Zhang : setupapi/tests: Add default device registry property tests.
Alexandre Julliard
julliard at winehq.org
Mon Nov 18 16:19:19 CST 2019
Module: wine
Branch: master
Commit: 4fe3d7e220225ddd57ef0acd9142ef8437cdb9ca
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4fe3d7e220225ddd57ef0acd9142ef8437cdb9ca
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Mon Nov 18 17:29:14 2019 +0800
setupapi/tests: Add default device registry property tests.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/setupapi/tests/devinst.c | 117 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 115 insertions(+), 2 deletions(-)
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index 452a570c4f..2f81a3abf5 100644
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -27,6 +27,7 @@
#include "winuser.h"
#include "winreg.h"
#include "initguid.h"
+#include "devguid.h"
#include "devpkey.h"
#include "setupapi.h"
#include "cfgmgr32.h"
@@ -1496,7 +1497,7 @@ static void test_registry_property_a(void)
{
static const CHAR bogus[] = "System\\CurrentControlSet\\Enum\\Root\\LEGACY_BOGUS";
SP_DEVINFO_DATA device = {sizeof(device)};
- CHAR buf[6] = "";
+ CHAR buf[64] = "";
DWORD size, type;
HDEVINFO set;
BOOL ret;
@@ -1590,13 +1591,69 @@ todo_wine {
res = RegOpenKeyA(HKEY_LOCAL_MACHINE, bogus, &key);
ok(res == ERROR_FILE_NOT_FOUND, "Key should not exist.\n");
+
+ /* Test existing registry properties right after device creation */
+ set = SetupDiCreateDeviceInfoList(&guid, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError());
+
+ /* Create device from a not registered class without device name */
+ ret = SetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, NULL, DICD_GENERATE_ID, &device);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ /* No SPDRP_DEVICEDESC property */
+ SetLastError(0xdeadbeef);
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_DEVICEDESC, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_DATA, "Got unexpected error %#x.\n", GetLastError());
+
+ /* No SPDRP_CLASS property */
+ SetLastError(0xdeadbeef);
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASS, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_DATA, "Got unexpected error %#x.\n", GetLastError());
+
+ /* Have SPDRP_CLASSGUID property */
+ memset(buf, 0, sizeof(buf));
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASSGUID, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+ ok(!lstrcmpiA(buf, "{6a55b5a4-3f65-11db-b704-0011955c2bdb}"), "Got unexpected value %s.\n", buf);
+
+ ret = SetupDiDeleteDeviceInfo(set, &device);
+ ok(ret, "Failed to delete device, error %#x.\n", GetLastError());
+
+ /* Create device from a not registered class with a device name */
+ ret = SetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, "device_name", NULL, DICD_GENERATE_ID, &device);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ /* Have SPDRP_DEVICEDESC property */
+ memset(buf, 0, sizeof(buf));
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_DEVICEDESC, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+ ok(!lstrcmpA(buf, "device_name"), "Got unexpected value %s.\n", buf);
+
+ SetupDiDestroyDeviceInfoList(set);
+
+ /* Create device from a registered class */
+ set = SetupDiCreateDeviceInfoList(&GUID_DEVCLASS_DISPLAY, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError());
+
+ ret = SetupDiCreateDeviceInfoA(set, "display", &GUID_DEVCLASS_DISPLAY, NULL, NULL, DICD_GENERATE_ID, &device);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ /* Have SPDRP_CLASS property */
+ memset(buf, 0, sizeof(buf));
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASS, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ todo_wine ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+ todo_wine ok(!lstrcmpA(buf, "Display"), "Got unexpected value %s.\n", buf);
+
+ SetupDiDestroyDeviceInfoList(set);
}
static void test_registry_property_w(void)
{
WCHAR friendly_name[] = {'B','o','g','u','s',0};
SP_DEVINFO_DATA device = {sizeof(device)};
- WCHAR buf[6] = {0};
+ WCHAR buf[64] = {0};
DWORD size, type;
HDEVINFO set;
BOOL ret;
@@ -1694,6 +1751,62 @@ todo_wine {
res = RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key);
ok(res == ERROR_FILE_NOT_FOUND, "Key should not exist.\n");
+
+ /* Test existing registry properties right after device creation */
+ set = SetupDiCreateDeviceInfoList(&guid, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError());
+
+ /* Create device from a not registered class without device name */
+ ret = SetupDiCreateDeviceInfoW(set, L"LEGACY_BOGUS", &guid, NULL, NULL, DICD_GENERATE_ID, &device);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ /* No SPDRP_DEVICEDESC property */
+ SetLastError(0xdeadbeef);
+ ret = SetupDiGetDeviceRegistryPropertyW(set, &device, SPDRP_DEVICEDESC, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_DATA, "Got unexpected error %#x.\n", GetLastError());
+
+ /* No SPDRP_CLASS property */
+ SetLastError(0xdeadbeef);
+ ret = SetupDiGetDeviceRegistryPropertyW(set, &device, SPDRP_CLASS, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_DATA, "Got unexpected error %#x.\n", GetLastError());
+
+ /* Have SPDRP_CLASSGUID property */
+ memset(buf, 0, sizeof(buf));
+ ret = SetupDiGetDeviceRegistryPropertyW(set, &device, SPDRP_CLASSGUID, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+ ok(!lstrcmpiW(buf, L"{6a55b5a4-3f65-11db-b704-0011955c2bdb}"), "Got unexpected value %s.\n", wine_dbgstr_w(buf));
+
+ ret = SetupDiDeleteDeviceInfo(set, &device);
+ ok(ret, "Failed to delete device, error %#x.\n", GetLastError());
+
+ /* Create device from a not registered class with a device name */
+ ret = SetupDiCreateDeviceInfoW(set, L"LEGACY_BOGUS", &guid, L"device_name", NULL, DICD_GENERATE_ID, &device);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ /* Have SPDRP_DEVICEDESC property */
+ memset(buf, 0, sizeof(buf));
+ ret = SetupDiGetDeviceRegistryPropertyW(set, &device, SPDRP_DEVICEDESC, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+ ok(!lstrcmpW(buf, L"device_name"), "Got unexpected value %s.\n", wine_dbgstr_w(buf));
+
+ SetupDiDestroyDeviceInfoList(set);
+
+ /* Create device from a registered class */
+ set = SetupDiCreateDeviceInfoList(&GUID_DEVCLASS_DISPLAY, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#x.\n", GetLastError());
+
+ ret = SetupDiCreateDeviceInfoW(set, L"display", &GUID_DEVCLASS_DISPLAY, NULL, NULL, DICD_GENERATE_ID, &device);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ /* Have SPDRP_CLASS property */
+ memset(buf, 0, sizeof(buf));
+ ret = SetupDiGetDeviceRegistryPropertyW(set, &device, SPDRP_CLASS, NULL, (BYTE *)buf, sizeof(buf), NULL);
+ todo_wine ok(ret, "Failed to get property, error %#x.\n", GetLastError());
+ todo_wine ok(!lstrcmpW(buf, L"Display"), "Got unexpected value %s.\n", wine_dbgstr_w(buf));
+
+ SetupDiDestroyDeviceInfoList(set);
}
static void test_get_inf_class(void)
More information about the wine-cvs
mailing list