From: Nikolay Sivov Subject: [PATCH v3 2/4] advapi32/tests: Add some tests for RegRenameKey(). Message-Id: Date: Tue, 28 Jun 2022 20:53:26 +0000 In-Reply-To: References: From: Nikolay Sivov Signed-off-by: Nikolay Sivov --- dlls/advapi32/tests/registry.c | 73 ++++++++++++++++++++++++++++++++++ include/winreg.h | 1 + 2 files changed, 74 insertions(+) diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 6152a313803..c2e78192f2e 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -4475,6 +4475,78 @@ static void test_EnumDynamicTimeZoneInformation(void) RegCloseKey(key); } +static void test_RegRenameKey(void) +{ + HKEY key, key2; + LSTATUS ret; + + ret = RegRenameKey(NULL, NULL, NULL); + todo_wine + ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(NULL, NULL, L"newname"); + todo_wine + ok(ret == ERROR_INVALID_HANDLE, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(NULL, L"oldname", NULL); + todo_wine + ok(ret == ERROR_INVALID_HANDLE, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(NULL, L"oldname", L"newname"); + todo_wine + ok(ret == ERROR_INVALID_HANDLE, "Unexpected return value %ld.\n", ret); + + ret = RegCreateKeyExA(hkey_main, "TestRenameKey", 0, NULL, 0, KEY_READ, NULL, &key, NULL); + ok(!ret, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(key, NULL, L"TestNewRenameKey"); + todo_wine + ok(ret == ERROR_ACCESS_DENIED, "Unexpected return value %ld.\n", ret); + RegCloseKey(key); + + /* Rename itself. */ + ret = RegCreateKeyExA(hkey_main, "TestRenameKey", 0, NULL, 0, KEY_WRITE, NULL, &key, NULL); + ok(!ret, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(key, NULL, NULL); + todo_wine + ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(key, NULL, L"TestNewRenameKey"); + todo_wine + ok(!ret, "Unexpected return value %ld.\n", ret); + RegCloseKey(key); + + ret = RegDeleteKeyA(hkey_main, "TestNewRenameKey"); + todo_wine + ok(!ret, "Unexpected return value %ld.\n", ret); + ret = RegDeleteKeyA(hkey_main, "TestRenameKey"); + todo_wine + ok(ret, "Unexpected return value %ld.\n", ret); + + /* Subkey does not exist. */ + ret = RegCreateKeyExA(hkey_main, "TestRenameKey", 0, NULL, 0, KEY_WRITE, NULL, &key, NULL); + ok(!ret, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(key, L"unknown_subkey", NULL); + todo_wine + ok(ret == ERROR_FILE_NOT_FOUND, "Unexpected return value %ld.\n", ret); + ret = RegRenameKey(key, L"unknown_subkey", L"known_subkey"); + todo_wine + ok(ret == ERROR_FILE_NOT_FOUND, "Unexpected return value %ld.\n", ret); + + /* Rename existing subkey. */ + ret = RegCreateKeyExA(key, "known_subkey", 0, NULL, 0, KEY_WRITE, NULL, &key2, NULL); + ok(!ret, "Unexpected return value %ld.\n", ret); + RegCloseKey(key2); + + ret = RegRenameKey(key, L"known_subkey", L"renamed_subkey"); + todo_wine + ok(!ret, "Unexpected return value %ld.\n", ret); + + ret = RegDeleteKeyA(key, "renamed_subkey"); + todo_wine + ok(!ret, "Unexpected return value %ld.\n", ret); + ret = RegDeleteKeyA(key, "known_subkey"); + todo_wine + ok(ret, "Unexpected return value %ld.\n", ret); + + RegCloseKey(key); +} + START_TEST(registry) { /* Load pointers for functions that are not available in all Windows versions */ @@ -4514,6 +4586,7 @@ START_TEST(registry) test_RegLoadMUIString(); test_EnumDynamicTimeZoneInformation(); test_perflib_key(); + test_RegRenameKey(); /* cleanup */ delete_key( hkey_main ); diff --git a/include/winreg.h b/include/winreg.h index 00bc8c02dc8..da92fb11f94 100644 --- a/include/winreg.h +++ b/include/winreg.h @@ -178,6 +178,7 @@ WINADVAPI LSTATUS WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,LPLONG); WINADVAPI LSTATUS WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); WINADVAPI LSTATUS WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); #define RegQueryValueEx WINELIB_NAME_AW(RegQueryValueEx) +WINADVAPI LSTATUS WINAPI RegRenameKey(HKEY,LPCWSTR,LPCWSTR); WINADVAPI LSTATUS WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR); WINADVAPI LSTATUS WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR); #define RegReplaceKey WINELIB_NAME_AW(RegReplaceKey) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/218