Akihiro Sagawa : advapi32/tests: Add more RegLoadMUIString tests.
Alexandre Julliard
julliard at winehq.org
Mon May 27 14:50:20 CDT 2019
Module: wine
Branch: master
Commit: 90f79099a45437b9a3a0127eaf5d45f8b49b2fec
URL: https://source.winehq.org/git/wine.git/?a=commit;h=90f79099a45437b9a3a0127eaf5d45f8b49b2fec
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Sun May 26 21:15:01 2019 +0900
advapi32/tests: Add more RegLoadMUIString tests.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/advapi32/tests/Makefile.in | 2 ++
dlls/advapi32/tests/registry.c | 79 ++++++++++++++++++++++++++++++++++++++++-
dlls/advapi32/tests/rsrc.rc | 22 ++++++++++++
3 files changed, 102 insertions(+), 1 deletion(-)
diff --git a/dlls/advapi32/tests/Makefile.in b/dlls/advapi32/tests/Makefile.in
index 36ce031..12583e5 100644
--- a/dlls/advapi32/tests/Makefile.in
+++ b/dlls/advapi32/tests/Makefile.in
@@ -13,3 +13,5 @@ C_SRCS = \
registry.c \
security.c \
service.c
+
+RC_SRCS = rsrc.rc
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index c178e39..911186f 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -3836,17 +3836,42 @@ todo_wine
static void test_RegLoadMUIString(void)
{
- HMODULE hUser32, hResDll;
+ HMODULE hUser32, hResDll, hFile;
int (WINAPI *pLoadStringW)(HMODULE, UINT, WCHAR *, int);
LONG ret;
HKEY hkey;
DWORD type, size, text_size;
UINT i;
char buf[64], *p, sysdir[MAX_PATH];
+ char with_env_var[128], filename[MAX_PATH], tmp_path[MAX_PATH];
WCHAR textW[64], bufW[64];
WCHAR curdirW[MAX_PATH], sysdirW[MAX_PATH];
const static char tz_value[] = "MUI_Std";
const static WCHAR tz_valueW[] = {'M','U','I','_','S','t','d', 0};
+ struct {
+ const char* value;
+ DWORD type;
+ BOOL use_sysdir;
+ DWORD expected;
+ DWORD broken_ret;
+ BOOL todo;
+ } test_case[] = {
+ /* 0 */
+ { "", REG_SZ, FALSE, ERROR_INVALID_DATA, 0, TRUE },
+ { "not a MUI string", REG_SZ, FALSE, ERROR_INVALID_DATA, 0, TRUE },
+ { "@unknown.dll", REG_SZ, TRUE, ERROR_INVALID_DATA, 0, TRUE },
+ { "@unknown.dll,-10", REG_SZ, TRUE, ERROR_FILE_NOT_FOUND },
+ /* 4 */
+ { with_env_var, REG_SZ, FALSE, ERROR_SUCCESS, 0, TRUE },
+ { with_env_var, REG_EXPAND_SZ, FALSE, ERROR_SUCCESS },
+ { "%WineMuiTest1%", REG_EXPAND_SZ, TRUE, ERROR_INVALID_DATA, 0, TRUE },
+ { "@%WineMuiTest2%", REG_EXPAND_SZ, TRUE, ERROR_SUCCESS },
+ /* 8 */
+ { "@%WineMuiExe%,a", REG_SZ, FALSE, ERROR_INVALID_DATA, 0, TRUE },
+ { "@%WineMuiExe%,-4", REG_SZ, FALSE, ERROR_NOT_FOUND, ERROR_FILE_NOT_FOUND, TRUE },
+ { "@%WineMuiExe%,-39", REG_SZ, FALSE, ERROR_RESOURCE_NAME_NOT_FOUND, 0, TRUE },
+ { "@%WineMuiDat%,-16", REG_EXPAND_SZ, FALSE, ERROR_BAD_EXE_FORMAT, ERROR_FILE_NOT_FOUND, TRUE },
+ };
if (!pRegLoadMUIStringA || !pRegLoadMUIStringW)
{
@@ -3869,6 +3894,13 @@ static void test_RegLoadMUIString(void)
ok(ret == ERROR_SUCCESS, "got %d\n", ret);
ok(buf[0] == '@', "got %s\n", buf);
+ /* setup MUI string for tests */
+ strcpy(with_env_var, "@%windir%\\system32\\");
+ strcat(with_env_var, &buf[1]);
+ SetEnvironmentVariableA("WineMuiTest1", buf);
+ SetEnvironmentVariableA("WineMuiTest2", &buf[1]);
+
+ /* load expecting text */
p = strrchr(buf, ',');
*p = '\0';
i = atoi(p + 2); /* skip ',-' */
@@ -3955,7 +3987,52 @@ static void test_RegLoadMUIString(void)
ok(ret == ERROR_CALL_NOT_IMPLEMENTED, "got %d, expected ERROR_CALL_NOT_IMPLEMENTED\n", ret);
RegCloseKey(hkey);
+
+ GetModuleFileNameA(NULL, filename, ARRAY_SIZE(filename));
+ SetEnvironmentVariableA("WineMuiExe", filename);
+
+ GetTempPathA(ARRAY_SIZE(tmp_path), tmp_path);
+ GetTempFileNameA(tmp_path, "mui", 0, filename);
+ SetEnvironmentVariableA("WineMuiDat", filename);
+
+ /* write dummy data to the file, i.e. it's not a PE file. */
+ hFile = CreateFileA(filename, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+ ok(hFile != INVALID_HANDLE_VALUE, "can't open %s\n", filename);
+ WriteFile(hFile, filename, strlen(filename), &size, NULL);
+ CloseHandle(hFile);
+
+ for (i = 0; i < ARRAY_SIZE(test_case); i++)
+ {
+ size = test_case[i].value ? strlen(test_case[i].value) + 1 : 0;
+ ret = RegSetValueExA(hkey_main, tz_value, 0, test_case[i].type,
+ (const BYTE *)test_case[i].value, size);
+ ok(ret == ERROR_SUCCESS, "[%2u] got %d\n", i, ret);
+
+ size = 0xdeadbeef;
+ memset(bufW, 0xff, sizeof(bufW));
+ ret = pRegLoadMUIStringW(hkey_main, tz_valueW, bufW, ARRAY_SIZE(bufW),
+ &size, 0,
+ test_case[i].use_sysdir ? sysdirW : NULL);
+ todo_wine_if(test_case[i].todo)
+ ok(ret == test_case[i].expected ||
+ broken(test_case[i].value[0] == '%' && ret == ERROR_SUCCESS /* vista */) ||
+ broken(test_case[i].broken_ret && ret == test_case[i].broken_ret /* vista */),
+ "[%2u] expected %d, got %d\n", i, test_case[i].expected, ret);
+ if (ret == ERROR_SUCCESS && test_case[i].expected == ERROR_SUCCESS)
+ {
+ ok(size == text_size, "[%2u] got %u, expected %u\n", i, size, text_size);
+ ok(!memcmp(bufW, textW, size), "[%2u] got %s, expected %s\n", i,
+ wine_dbgstr_wn(bufW, size/sizeof(WCHAR)),
+ wine_dbgstr_wn(textW, text_size/sizeof(WCHAR)));
+ }
+ }
+
SetCurrentDirectoryW(curdirW);
+ DeleteFileA(filename);
+ SetEnvironmentVariableA("WineMuiTest1", NULL);
+ SetEnvironmentVariableA("WineMuiTest2", NULL);
+ SetEnvironmentVariableA("WineMuiExe", NULL);
+ SetEnvironmentVariableA("WineMuiDat", NULL);
}
START_TEST(registry)
diff --git a/dlls/advapi32/tests/rsrc.rc b/dlls/advapi32/tests/rsrc.rc
new file mode 100644
index 0000000..35b6171
--- /dev/null
+++ b/dlls/advapi32/tests/rsrc.rc
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2019 Akihiro Sagawa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+STRINGTABLE
+{
+ 1 "dummy"
+}
More information about the wine-cvs
mailing list