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