diff --git a/programs/reg/tests/copy.c b/programs/reg/tests/copy.c index 3ed75acad4d..53d990811ac 100644 --- a/programs/reg/tests/copy.c +++ b/programs/reg/tests/copy.c @@ -325,6 +325,56 @@ static void test_copy_complex_data(void) todo_wine ok(compare_export("file.reg", complex_data_test, 0), "compare_export() failed\n"); } +static void test_copy_key_order(void) +{ + HKEY hkey; + DWORD r; + + delete_tree(HKEY_CURRENT_USER, COPY_SRC); + verify_key_nonexist(HKEY_CURRENT_USER, COPY_SRC); + + delete_tree(HKEY_CURRENT_USER, KEY_BASE); + verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE); + + add_key(HKEY_CURRENT_USER, COPY_SRC, &hkey); + add_key(hkey, "Subkey2", NULL); + add_key(hkey, "Subkey1", NULL); + close_key(hkey); + + run_reg_exe("reg copy HKCU\\" COPY_SRC " HKCU\\" KEY_BASE " /s /f", &r); + todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + todo_wine verify_key(HKEY_CURRENT_USER, KEY_BASE); + + run_reg_exe("reg export HKCU\\" KEY_BASE " file.reg /y", &r); + todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + todo_wine ok(compare_export("file.reg", key_order_test, 0), "compare_export() failed\n"); +} + +static void test_copy_value_order(void) +{ + HKEY hkey; + DWORD r; + + delete_tree(HKEY_CURRENT_USER, COPY_SRC); + verify_key_nonexist(HKEY_CURRENT_USER, COPY_SRC); + + delete_tree(HKEY_CURRENT_USER, KEY_BASE); + verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE); + + add_key(HKEY_CURRENT_USER, COPY_SRC, &hkey); + add_value(hkey, "Value 2", REG_SZ, "I was added first!", 19); + add_value(hkey, "Value 1", REG_SZ, "I was added second!", 20); + close_key(hkey); + + run_reg_exe("reg copy HKCU\\" COPY_SRC " HKCU\\" KEY_BASE " /f", &r); + todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + todo_wine verify_key(HKEY_CURRENT_USER, KEY_BASE); + + run_reg_exe("reg export HKCU\\" KEY_BASE " file.reg /y", &r); + todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + todo_wine ok(compare_export("file.reg", value_order_test, 0), "compare_export() failed\n"); +} + static void test_copy_hex_data(void) { HKEY hkey; @@ -498,6 +548,8 @@ START_TEST(copy) test_copy_empty_key(); test_copy_simple_data(); test_copy_complex_data(); + test_copy_key_order(); + test_copy_value_order(); test_copy_hex_data(); test_copy_embedded_null_values(); test_copy_slashes(); diff --git a/programs/reg/tests/export.c b/programs/reg/tests/export.c index be1d9ea4f86..1348b8eebdb 100644 --- a/programs/reg/tests/export.c +++ b/programs/reg/tests/export.c @@ -99,6 +99,18 @@ const char *complex_data_test = "@=dword:12345678\r\n" "\"43981\"=hex(abcd):56,61,6c,75,65,00\r\n\r\n"; +const char *key_order_test = + "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" + "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n\r\n" + "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1]\r\n\r\n" + "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2]\r\n\r\n"; + +const char *value_order_test = + "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" + "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n" + "\"Value 2\"=\"I was added first!\"\r\n" + "\"Value 1\"=\"I was added second!\"\r\n\r\n"; + const char *empty_hex_test = "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n" @@ -164,18 +176,6 @@ static void test_export(void) HKEY hkey, subkey; BYTE hex[4], buffer[8]; - const char *key_order_test = - "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" - "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n\r\n" - "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1]\r\n\r\n" - "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2]\r\n\r\n"; - - const char *value_order_test = - "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" - "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n" - "\"Value 2\"=\"I was added first!\"\r\n" - "\"Value 1\"=\"I was added second!\"\r\n\r\n"; - delete_tree(HKEY_CURRENT_USER, KEY_BASE); verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE); diff --git a/programs/reg/tests/reg_test.h b/programs/reg/tests/reg_test.h index 14636b4edc9..28e2d8e3abe 100644 --- a/programs/reg/tests/reg_test.h +++ b/programs/reg/tests/reg_test.h @@ -81,6 +81,8 @@ BOOL compare_export_(const char *file, unsigned line, const char *filename, extern const char *empty_key_test; extern const char *simple_data_test; extern const char *complex_data_test; +extern const char *key_order_test; +extern const char *value_order_test; extern const char *empty_hex_test; extern const char *empty_hex_test2; extern const char *hex_types_test;