[PATCH] reg/tests: Refactor 'add' tests into registry types, keys and syntax checks

Hugh McMaster hugh.mcmaster at outlook.com
Thu Apr 15 08:14:59 CDT 2021


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/tests/add.c | 253 ++++++++++++++++++++++++++-------------
 1 file changed, 167 insertions(+), 86 deletions(-)

diff --git a/programs/reg/tests/add.c b/programs/reg/tests/add.c
index 30e5fe55667..8357e9ad0bc 100644
--- a/programs/reg/tests/add.c
+++ b/programs/reg/tests/add.c
@@ -204,12 +204,9 @@ void delete_value_(const char *file, unsigned line, const HKEY hkey, const char
 
 /* Unit tests */
 
-static void test_add(void)
+static void test_command_syntax(void)
 {
-    HKEY hkey, hsubkey;
-    LONG err;
-    DWORD r, dword, type, size;
-    char buffer[22];
+    DWORD r;
 
     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
@@ -226,19 +223,56 @@ static void test_add(void)
     run_reg_exe("reg add -H", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
 
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /f", &r);
-    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+    /* Duplicate switches */
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v Wine /t REG_DWORD /d 0x1 /v Test /f", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v dup1 /t REG_DWORD /d 123 /f /t REG_SZ", &r);
+    ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */),
+       "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v dup2 /t REG_DWORD /d 123 /f /d 456", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
 
     run_reg_exe("reg add HKCU\\" KEY_BASE " /f /f", &r);
     ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
 
-    open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v Wine /ve", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    /* No /v argument */
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /d Test /f /v", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    /* Test invalid switches */
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid1 /a", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid2 /ae", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid3 /", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid4 -", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
 
     /* Test empty type */
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v emptyType /t \"\" /d WineTest /f", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+}
+
+static void test_key_formats(void)
+{
+    HKEY hkey;
+    DWORD r;
+    LONG err;
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
 
-    /* Test input key formats */
     run_reg_exe("reg add \\HKCU\\" KEY_BASE "\\keytest0 /f", &r);
     ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
     verify_key_nonexist(hkey, "keytest0");
@@ -257,13 +291,19 @@ static void test_add(void)
     run_reg_exe("reg add HKCU\\" KEY_BASE "\\keytest3\\ /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_key(hkey, "keytest3");
-    delete_key(hkey, "keytest3");
 
     run_reg_exe("reg add HKCU\\" KEY_BASE "\\keytest4 /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_key(hkey, "keytest4");
-    delete_key(hkey, "keytest4");
 
+    run_reg_exe("reg add HKCU\\" KEY_BASE "\\https://winehq.org /f", &r);
+    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+    verify_key(hkey, "https://winehq.org");
+
+    close_key(hkey);
+    delete_tree(HKEY_CURRENT_USER, KEY_BASE);
+
+    /* Test validity of trailing backslash after system key */
     run_reg_exe("reg add HKCU\\ /v Value1 /t REG_SZ /d foo /f", &r);
     todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
     todo_wine verify_reg_nonexist(HKEY_CURRENT_USER, "Value1");
@@ -271,8 +311,44 @@ static void test_add(void)
     run_reg_exe("reg add HKEY_CURRENT_USER\\ /v Value2 /t REG_SZ /d bar /f", &r);
     todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
     todo_wine verify_reg_nonexist(HKEY_CURRENT_USER, "Value2");
+}
+
+static void test_add(void)
+{
+    HKEY hkey, hsubkey;
+    DWORD r, dword;
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /f", &r);
+    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+
+    open_key(HKEY_CURRENT_USER, KEY_BASE, KEY_WRITE, &hkey);
+
+    /* Test whether overwriting a registry key modifies existing keys and values */
+    add_key(hkey, "Subkey", &hsubkey);
+    close_key(hsubkey);
+    add_value(hkey, "Test1", REG_SZ, "Value1", 7);
+    dword = 0x123;
+    add_value(hkey, "Test2", REG_DWORD, &dword, sizeof(dword));
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /f", &r);
+    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+
+    verify_key(HKEY_CURRENT_USER, KEY_BASE);
+    verify_key(hkey, "Subkey");
+    verify_reg(hkey, "Test1", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Test2", REG_DWORD, &dword, sizeof(dword), 0);
+
+    close_key(hkey);
+    delete_tree(HKEY_CURRENT_USER, KEY_BASE);
+}
+
+static void test_reg_none(void)
+{
+    HKEY hkey;
+    DWORD r;
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
 
-    /* REG_NONE */
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v none0 /d deadbeef /t REG_NONE /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg(hkey, "none0", REG_NONE, "d\0e\0a\0d\0b\0e\0e\0f\0\0", 18, 0);
@@ -285,7 +361,17 @@ static void test_add(void)
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, NULL, REG_NONE, "\0", 2, 0);
 
-    /* REG_SZ */
+    close_key(hkey);
+    delete_key(HKEY_CURRENT_USER, KEY_BASE);
+}
+
+static void test_reg_sz(void)
+{
+    HKEY hkey;
+    DWORD r;
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
+
     run_reg_exe("reg add HKCU\\" KEY_BASE " /d WineTest /f", &r);
     ok(r == REG_EXIT_SUCCESS || broken(r == REG_EXIT_FAILURE /* WinXP */),
        "got exit code %d, expected 0\n", r);
@@ -340,7 +426,26 @@ static void test_add(void)
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, "\\0", REG_SZ, "Value", 6, 0);
 
-    /* REG_EXPAND_SZ */
+    /* Test support for forward and back slashes in value names */
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v count/up /d one/two/three /f", &r);
+    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+    verify_reg(hkey, "count/up", REG_SZ, "one/two/three", 14, 0);
+
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v \\foo\\bar /f", &r);
+    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+    verify_reg(hkey, "\\foo\\bar", REG_SZ, "", 1, 0);
+
+    close_key(hkey);
+    delete_key(HKEY_CURRENT_USER, KEY_BASE);
+}
+
+static void test_reg_expand_sz(void)
+{
+    HKEY hkey;
+    DWORD r;
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
+
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v expand0 /t REG_EXpand_sz /d \"dead%PATH%beef\" /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, "expand0", REG_EXPAND_SZ, "dead%PATH%beef", 15, 0);
@@ -365,7 +470,19 @@ static void test_add(void)
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, NULL, REG_EXPAND_SZ, "", 1, 0);
 
-    /* REG_BINARY */
+    close_key(hkey);
+    delete_key(HKEY_CURRENT_USER, KEY_BASE);
+}
+
+static void test_reg_binary(void)
+{
+    HKEY hkey;
+    DWORD r, dword, type, size;
+    char buffer[22];
+    LONG err;
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
+
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_BINARY /v bin0 /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, "bin0", REG_BINARY, buffer, 0, 0);
@@ -389,7 +506,7 @@ static void test_add(void)
     /* Remaining nibble prefixed */
     buffer[0] = 0x0d; buffer[1] = 0xea; buffer[2] = 0xdb;
     buffer[3] = 0xee; buffer[4] = 0xf0; buffer[5] = 0xdd;
-    /* Remaining nibble suffixed on winXP */
+    /* Remaining nibble suffixed on WinXP */
     buffer[6] = 0xde; buffer[7] = 0xad; buffer[8] = 0xbe;
     buffer[9] = 0xef; buffer[10] = 0x0d; buffer[11] = 0xd0;
     size = 6;
@@ -411,7 +528,18 @@ static void test_add(void)
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, NULL, REG_BINARY, buffer, 0, 0);
 
-    /* REG_DWORD */
+    close_key(hkey);
+    delete_key(HKEY_CURRENT_USER, KEY_BASE);
+}
+
+static void test_reg_dword(void)
+{
+    HKEY hkey;
+    DWORD r, dword, type, size;
+    LONG err;
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
+
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_DWORD /f /d 12345678", &r);
     ok(r == REG_EXIT_SUCCESS || broken(r == REG_EXIT_FAILURE /* WinXP */),
        "got exit code %d, expected 0\n", r);
@@ -510,7 +638,18 @@ static void test_add(void)
     run_reg_exe("reg add HKCU\\" KEY_BASE " /ve /t REG_DWORD_BIG_ENDIAN /f", &r);
     ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */), "got exit code %u, expected 1\n", r);
 
-    /* REG_MULTI_SZ */
+    close_key(hkey);
+    delete_key(HKEY_CURRENT_USER, KEY_BASE);
+}
+
+static void test_reg_multi_sz(void)
+{
+    HKEY hkey;
+    DWORD r;
+    char buffer[22];
+
+    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
+
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v multi0 /t REG_MULTI_SZ /d \"three\\0little\\0strings\" /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     memcpy(buffer, "three\0little\0strings\0", 22);
@@ -596,74 +735,8 @@ static void test_add(void)
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
     verify_reg(hkey, NULL, REG_MULTI_SZ, buffer, 1, 0);
 
-    /* Test forward and back slashes */
-    run_reg_exe("reg add HKCU\\" KEY_BASE "\\https://winehq.org /f", &r);
-    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_key(hkey, "https://winehq.org");
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v count/up /d one/two/three /f", &r);
-    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg(hkey, "count/up", REG_SZ, "one/two/three", 14, 0);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v \\foo\\bar /f", &r);
-    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg(hkey, "\\foo\\bar", REG_SZ, "", 1, 0);
-
     close_key(hkey);
-    delete_tree(HKEY_CURRENT_USER, KEY_BASE);
-
-    /* Test duplicate switches */
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v Wine /t REG_DWORD /d 0x1 /v Test /f", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v dup1 /t REG_DWORD /d 123 /f /t REG_SZ", &r);
-    ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */),
-       "got exit code %u, expected 1\n", r);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v dup2 /t REG_DWORD /d 123 /f /d 456", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
-
-    /* Multiple /v* switches */
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v Wine /ve", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
-
-    /* No /v argument */
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /d Test /f /v", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
-
-    /* Test invalid switches */
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid1 /a", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid2 /ae", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid3 /", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /v invalid4 -", &r);
-    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
-
-    /* Test whether overwriting a registry key modifies existing keys and values */
-    add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
-    add_key(hkey, "Subkey", &hsubkey);
-    close_key(hsubkey);
-    add_value(hkey, "Test1", REG_SZ, "Value1", 7);
-    dword = 0x123;
-    add_value(hkey, "Test2", REG_DWORD, &dword, sizeof(dword));
-
-    run_reg_exe("reg add HKCU\\" KEY_BASE " /f", &r);
-    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-
-    verify_key(HKEY_CURRENT_USER, KEY_BASE);
-    verify_key(hkey, "Subkey");
-    verify_reg(hkey, "Test1", REG_SZ, "Value1", 7, 0);
-    verify_reg(hkey, "Test2", REG_DWORD, &dword, sizeof(dword), 0);
-
-    delete_tree(HKEY_CURRENT_USER, KEY_BASE);
+    delete_key(HKEY_CURRENT_USER, KEY_BASE);
 }
 
 START_TEST(add)
@@ -675,5 +748,13 @@ START_TEST(add)
         return;
     }
 
+    test_command_syntax();
+    test_key_formats();
     test_add();
+    test_reg_none();
+    test_reg_sz();
+    test_reg_expand_sz();
+    test_reg_binary();
+    test_reg_dword();
+    test_reg_multi_sz();
 }
-- 
2.31.0




More information about the wine-devel mailing list