André Hentschel : advapi32/tests: More tests for the merged view of HKEY_CLASSES_ROOT.
Alexandre Julliard
julliard at winehq.org
Fri Dec 3 09:31:37 CST 2010
Module: wine
Branch: master
Commit: 9c7366c05e2f54916516ec707e2235f7c2ebb8f2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9c7366c05e2f54916516ec707e2235f7c2ebb8f2
Author: André Hentschel <nerv at dawncrow.de>
Date: Thu Dec 2 21:59:14 2010 +0100
advapi32/tests: More tests for the merged view of HKEY_CLASSES_ROOT.
---
dlls/advapi32/tests/registry.c | 85 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 84 insertions(+), 1 deletions(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index 505d5ad..d4beb17 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -1914,7 +1914,7 @@ static void test_redirection(void)
static void test_classesroot(void)
{
- HKEY hkey, hkcr;
+ HKEY hkey, hklm, hkcr;
DWORD size = 8;
DWORD type = REG_SZ;
static CHAR buffer[8];
@@ -1963,8 +1963,91 @@ static void test_classesroot(void)
/* cleanup */
delete_key( hkey );
+ delete_key( hkcr );
RegCloseKey( hkey );
RegCloseKey( hkcr );
+
+ /* create a key in the hklm classes */
+ if (!RegOpenKeyA( HKEY_LOCAL_MACHINE, "Software\\Classes\\WineTestCls", &hklm ))
+ {
+ delete_key( hklm );
+ RegCloseKey( hklm );
+ }
+ res = RegCreateKeyExA( HKEY_LOCAL_MACHINE, "Software\\Classes\\WineTestCls", 0, NULL, REG_OPTION_NON_VOLATILE,
+ KEY_ALL_ACCESS, NULL, &hklm, NULL );
+ if (res == ERROR_ACCESS_DENIED)
+ {
+ skip("not enough privileges to add a system class\n");
+ return;
+ }
+
+ /* try to open that key in hkcr */
+ res = RegOpenKeyExA( HKEY_CLASSES_ROOT, "WineTestCls", 0,
+ KEY_QUERY_VALUE|KEY_SET_VALUE, &hkcr );
+ ok(res == ERROR_SUCCESS,
+ "test key not found in hkcr: %d\n", res);
+ if (res)
+ {
+ delete_key( hklm );
+ RegCloseKey( hklm );
+ return;
+ }
+
+ /* set a value in hklm classes */
+ res = RegSetValueExA(hklm, "val2", 0, REG_SZ, (const BYTE *)"hklm", sizeof("user"));
+ ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError());
+
+ /* try to find the value in hkcr */
+ res = RegQueryValueExA(hkcr, "val2", NULL, &type, (LPBYTE)buffer, &size);
+ ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", res);
+ ok(!strcmp( buffer, "hklm" ), "value set to '%s'\n", buffer );
+
+ /* modify the value in hkcr */
+ res = RegSetValueExA(hkcr, "val2", 0, REG_SZ, (const BYTE *)"hkcr", sizeof("hkcr"));
+ ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d\n", res);
+
+ /* check that the value is not modified in hklm classes */
+ res = RegQueryValueExA(hklm, "val2", NULL, &type, (LPBYTE)buffer, &size);
+ ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d, GLE=%x\n", res, GetLastError());
+ ok(!strcmp( buffer, "hklm" ), "value set to '%s'\n", buffer );
+
+ if (RegCreateKeyExA( HKEY_CURRENT_USER, "Software\\Classes\\WineTestCls", 0, NULL, 0,
+ KEY_QUERY_VALUE|KEY_SET_VALUE, NULL, &hkey, NULL )) return;
+
+ /* try to open that key in hkcr */
+ res = RegOpenKeyExA( HKEY_CLASSES_ROOT, "WineTestCls", 0,
+ KEY_QUERY_VALUE|KEY_SET_VALUE, &hkcr );
+ ok(res == ERROR_SUCCESS,
+ "test key not found in hkcr: %d\n", res);
+
+ /* set a value in user's classes */
+ res = RegSetValueExA(hkey, "val2", 0, REG_SZ, (const BYTE *)"user", sizeof("user"));
+ ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError());
+
+ /* try to find the value in hkcr */
+ res = RegQueryValueExA(hkcr, "val2", NULL, &type, (LPBYTE)buffer, &size);
+ ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", res);
+ ok(!strcmp( buffer, "user" ), "value set to '%s'\n", buffer );
+
+ /* modify the value in hklm */
+ res = RegSetValueExA(hklm, "val2", 0, REG_SZ, (const BYTE *)"hklm", sizeof("user"));
+ ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError());
+
+ /* check that the value is not overwritten in hkcr or user's classes */
+ res = RegQueryValueExA(hkcr, "val2", NULL, &type, (LPBYTE)buffer, &size);
+ ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", res);
+ ok(!strcmp( buffer, "user" ), "value set to '%s'\n", buffer );
+ res = RegQueryValueExA(hkey, "val2", NULL, &type, (LPBYTE)buffer, &size);
+ ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d, GLE=%x\n", res, GetLastError());
+ ok(!strcmp( buffer, "user" ), "value set to '%s'\n", buffer );
+
+ /* cleanup */
+ delete_key( hkey );
+ delete_key( hklm );
+ delete_key( hkcr );
+ RegCloseKey( hkey );
+ RegCloseKey( hklm );
+ RegCloseKey( hkcr );
}
static void test_deleted_key(void)
More information about the wine-cvs
mailing list