advapi32/tests: Introduce tests for the merged view of HKEY_CLASSES_ROOT

André Hentschel nerv at dawncrow.de
Fri Oct 1 16:29:23 CDT 2010


---
 dlls/advapi32/tests/registry.c |   55 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index 30dda7e..8322d89 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -1912,6 +1912,60 @@ static void test_redirection(void)
     RegCloseKey( root64 );
 }
 
+static void test_classesroot(void)
+{
+    HKEY hkey, hkcr;
+    DWORD size = 8;
+    DWORD type = REG_SZ;
+    static CHAR buffer[8];
+    LONG res;
+
+    /* create a key in the user's classes */
+    if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Classes\\WineTestCls", &hkey ))
+        delete_key( hkey );
+    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 );
+    todo_wine ok(res == ERROR_SUCCESS ||
+                 broken(res == ERROR_FILE_NOT_FOUND /* Win9x */),
+                 "test key not found in hkcr: %d\n", res);
+
+    /* set a value in user's classes */
+    res = RegSetValueExA(hkey, "val1", 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, "val1", NULL, &type, (LPBYTE)buffer, &size);
+    todo_wine
+    {
+        ok(res == ERROR_SUCCESS ||
+           broken(res == ERROR_BADKEY /* Win9x */) ||
+           broken(res == ERROR_INVALID_HANDLE /* NT+ */),
+           "RegQueryValueExA failed: %d, GLE=%x\n", res, GetLastError());
+        ok(!strcmp( buffer, "user" ) || broken(!strcmp( buffer, "" ) /* Win9x */),
+           "value set to '%s'\n", buffer );
+    }
+
+    /* modify the value in hkcr */
+    res = RegSetValueExA(hkcr, "val1", 0, REG_SZ, (const BYTE *)"hkcr", sizeof("hkcr"));
+    todo_wine ok(res == ERROR_SUCCESS ||
+                 broken(res == ERROR_BADKEY /* Win9x */) ||
+                 broken(res == ERROR_INVALID_HANDLE /* NT+ */),
+                 "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError());
+
+    /* check if the value is also modified in user's classes */
+    res = RegQueryValueExA(hkey, "val1", NULL, &type, (LPBYTE)buffer, &size);
+    ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d, GLE=%x\n", res, GetLastError());
+    todo_wine ok(!strcmp( buffer, "hkcr" ) || broken(!strcmp( buffer, "user" ) /* Win9x */),
+                 "value set to '%s'\n", buffer );
+
+    /* cleanup */
+    delete_key( hkey );
+}
+
 static void test_deleted_key(void)
 {
     HKEY hkey, hkey2;
@@ -2004,6 +2058,7 @@ START_TEST(registry)
     test_string_termination();
     test_symlinks();
     test_redirection();
+    test_classesroot();
 
     /* SaveKey/LoadKey require the SE_BACKUP_NAME privilege to be set */
     if (set_privileges(SE_BACKUP_NAME, TRUE) &&
-- 

Best Regards, André Hentschel



More information about the wine-patches mailing list