Greg Geldorp : kernel32/tests: Add tests to verify USERPROFILE and environment variables from registry are present and correct .
Alexandre Julliard
julliard at winehq.org
Mon Dec 20 17:49:49 CST 2010
Module: wine
Branch: master
Commit: 0650cb2456c1fc75cadf299a54eff321b59fe1be
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0650cb2456c1fc75cadf299a54eff321b59fe1be
Author: Greg Geldorp <ggeldorp at vmware.com>
Date: Sun Dec 19 17:47:42 2010 +0100
kernel32/tests: Add tests to verify USERPROFILE and environment variables from registry are present and correct.
---
dlls/kernel32/tests/environ.c | 109 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/tests/environ.c b/dlls/kernel32/tests/environ.c
index c38aef7..b6a900e 100644
--- a/dlls/kernel32/tests/environ.c
+++ b/dlls/kernel32/tests/environ.c
@@ -25,6 +25,7 @@
#include "winbase.h"
#include "winerror.h"
#include "winnls.h"
+#include "winreg.h"
static CHAR string[MAX_PATH];
#define ok_w(res, format, szString) \
@@ -34,13 +35,120 @@ static CHAR string[MAX_PATH];
static BOOL (WINAPI *pGetComputerNameExA)(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);
static BOOL (WINAPI *pGetComputerNameExW)(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD);
+static BOOL (WINAPI *pOpenProcessToken)(HANDLE,DWORD,PHANDLE);
+static BOOL (WINAPI *pGetUserProfileDirectoryA)(HANDLE,LPSTR,LPDWORD);
static void init_functionpointers(void)
{
HMODULE hkernel32 = GetModuleHandleA("kernel32.dll");
+ HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
+ HMODULE huserenv = LoadLibraryA("userenv.dll");
pGetComputerNameExA = (void *)GetProcAddress(hkernel32, "GetComputerNameExA");
pGetComputerNameExW = (void *)GetProcAddress(hkernel32, "GetComputerNameExW");
+ pOpenProcessToken = (void *)GetProcAddress(hadvapi32, "OpenProcessToken");
+ pGetUserProfileDirectoryA = (void *)GetProcAddress(huserenv,
+ "GetUserProfileDirectoryA");
+}
+
+static void test_Predefined(void)
+{
+ /*
+ * If anything fails here, your test environment is probably not set up
+ * correctly.
+ */
+ HKEY UserEnvironment;
+ LSTATUS Err;
+ DWORD Index;
+ char ValueName[256];
+ DWORD ValueNameSize;
+ DWORD Type;
+ char Data[1024];
+ DWORD DataSize;
+ char Env[sizeof(Data)];
+ DWORD EnvSize;
+ HANDLE Token;
+ BOOL NoErr;
+
+ /*
+ * Enumerate all values in HKCU\Environment and verify that environment
+ * variables with those names/values are present.
+ */
+ Err = RegOpenKeyExA(HKEY_CURRENT_USER, "Environment", 0, KEY_QUERY_VALUE,
+ &UserEnvironment);
+ ok(Err == ERROR_SUCCESS || Err == ERROR_FILE_NOT_FOUND,
+ "Failed to open HKCU\\Environment key, error %d\n",
+ Err);
+
+ if (Err == ERROR_SUCCESS)
+ {
+ Index = 0;
+ do
+ {
+ ValueNameSize = sizeof(ValueName);
+ DataSize = sizeof(Data);
+ Err = RegEnumValueA(UserEnvironment, Index, ValueName, &ValueNameSize,
+ NULL, &Type, (LPBYTE) Data, &DataSize);
+ if (Err == ERROR_SUCCESS)
+ {
+ if (Type == REG_EXPAND_SZ)
+ {
+ char Expanded[sizeof(Data)];
+ DWORD ExpandedSize;
+ ExpandedSize = ExpandEnvironmentStringsA(Data, Expanded,
+ sizeof(Expanded));
+ ok(ExpandedSize != 0 && ExpandedSize <= sizeof(Expanded),
+ "Failed to expand %s, error %u\n", Data, GetLastError());
+ memcpy(Data, Expanded, ExpandedSize);
+ Type = REG_SZ;
+ }
+ ok(Type == REG_SZ, "Expected data type REG_SZ, got %d\n", Type);
+ EnvSize = GetEnvironmentVariableA(ValueName, Env, sizeof(Env));
+ ok(EnvSize != 0 && EnvSize <= sizeof(Env),
+ "Failed to retrieve environment variable %s, error %u\n",
+ ValueName, GetLastError());
+ ok(strcmp(Data, Env) == 0,
+ "Expected value %s for env var %s, got %s\n", Data, ValueName,
+ Env);
+ }
+ Index++;
+ }
+ while (Err == ERROR_SUCCESS);
+ ok(Err == ERROR_NO_MORE_ITEMS,
+ "Unexpected return %d from RegEnumValueA\n", Err);
+
+ Err = RegCloseKey(UserEnvironment);
+ ok(Err == ERROR_SUCCESS, "Failed to close reg key, error %d\n", Err);
+ }
+
+ /*
+ * Check value of %USERPROFILE%, should be same as GetUserProfileDirectory()
+ */
+ if (pOpenProcessToken == NULL || pGetUserProfileDirectoryA == NULL)
+ {
+ skip("Skipping USERPROFILE check\n");
+ return;
+ }
+ NoErr = pOpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &Token);
+ ok(NoErr, "Failed to open token, error %u\n", GetLastError());
+ DataSize = sizeof(Data);
+ NoErr = pGetUserProfileDirectoryA(Token, Data, &DataSize);
+ todo_wine ok(NoErr, "Failed to get user profile dir, error %u\n",
+ GetLastError());
+ if (NoErr)
+ {
+ EnvSize = GetEnvironmentVariableA("USERPROFILE", Env, sizeof(Env));
+ ok(EnvSize != 0 && EnvSize <= sizeof(Env),
+ "Failed to retrieve environment variable USERPROFILE, error %u\n",
+ GetLastError());
+ ok(strcmp(Data, Env) == 0,
+ "USERPROFILE env var %s doesn't match GetUserProfileDirectory %s\n",
+ Env, Data);
+ }
+ else
+ skip("Skipping USERPROFILE check, can't get user profile dir\n");
+ NoErr = CloseHandle(Token);
+ ok(NoErr, "Failed to close token, error %u\n", GetLastError());
}
static void test_GetSetEnvironmentVariableA(void)
@@ -512,6 +620,7 @@ START_TEST(environ)
{
init_functionpointers();
+ test_Predefined();
test_GetSetEnvironmentVariableA();
test_GetSetEnvironmentVariableW();
test_ExpandEnvironmentStringsA();
More information about the wine-cvs
mailing list