[PATCH 1/2] shell32/test: Add more tests for SHFileOperation for FO_MOVE wildcard operation

Lorenzo Ferrillo lorenzofersteam at live.it
Sun Apr 12 15:48:33 CDT 2020


FO_MOVE SHFileOperation has a bug where move operations originating
with a wildcard that are involving multiple source files (>1) do not work under wine
unless there operation move also a folder.
Fix in the next patch

Analysis of the bug: https://bugs.winehq.org/show_bug.cgi?id=39269
Signed-off-by: Lorenzo Ferrillo <lorenzofersteam at live.it>
---
 dlls/shell32/tests/shlfileop.c | 65 ++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c
index 27c7244042..ca7876c846 100644
--- a/dlls/shell32/tests/shlfileop.c
+++ b/dlls/shell32/tests/shlfileop.c
@@ -2697,6 +2697,69 @@ static BOOL is_old_shell32(void)
     return FALSE;
 }
 
+
+static void test_move_wildchar(void)
+{
+    SHFILEOPSTRUCTA shfo;
+    CHAR from[5*MAX_PATH];
+    CHAR to[5*MAX_PATH];
+    DWORD retval;
+
+    clean_after_shfo_tests();
+
+    CreateDirectoryA("test4.txt", NULL);
+    CreateDirectoryA("testdir2", NULL);
+    createTestFile("testdir2\\one.txt");
+  
+    shfo.hwnd = NULL;
+    shfo.wFunc = FO_MOVE;
+    shfo.pFrom = from;
+    shfo.pTo = to;
+    shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
+    shfo.hNameMappings = NULL;
+    shfo.lpszProgressTitle = NULL;
+    shfo.fAnyOperationsAborted = FALSE;
+
+    set_curr_dir_path(from, "testdir2\\*.*\0");
+    set_curr_dir_path(to, "test4.txt\0");
+    retval = SHFileOperationA(&shfo);
+    ok(retval == ERROR_SUCCESS, "SHFileOperation failed\n");
+    ok(!shfo.fAnyOperationsAborted, "fAnyOperationsAborted %d\n", shfo.fAnyOperationsAborted);
+    ok(file_exists("testdir2"), "dir should not be moved\n");
+    ok(!file_exists("testdir2\\one.txt"), "file should be moved\n");
+    ok(file_exists("test4.txt\\one.txt"), "file should be moved here\n");
+
+    DeleteFileA("test4.txt\\one.txt");
+    DeleteFileA("testdir2\\one.txt");  
+    RemoveDirectoryA("test4.txt");
+    RemoveDirectoryA("testdir2");
+
+    CreateDirectoryA("test4.txt", NULL);
+    CreateDirectoryA("testdir2", NULL);
+    createTestFile("testdir2\\one.txt");
+    createTestFile("testdir2\\two.txt");
+
+    shfo.fAnyOperationsAborted = FALSE;
+    set_curr_dir_path(from, "testdir2\\*.*\0");
+    set_curr_dir_path(to, "test4.txt\0");
+    retval = SHFileOperationA(&shfo);
+    todo_wine ok(retval == ERROR_SUCCESS, "SHFileOperation failed\n");
+    todo_wine  ok(!shfo.fAnyOperationsAborted, "fAnyOperationsAborted %d\n", shfo.fAnyOperationsAborted);
+    ok(file_exists("testdir2"), "dir should not be moved\n");
+    todo_wine  ok(!file_exists("testdir2\\one.txt"), "file should be moved\n");
+    todo_wine  ok(!file_exists("testdir2\\two.txt"), "file should be moved\n");
+    todo_wine  ok(file_exists("test4.txt\\one.txt"), "file should be moved here\n");
+    todo_wine  ok(file_exists("test4.txt\\two.txt"), "file should be moved here\n");
+
+    DeleteFileA("test4.txt\\one.txt");
+    DeleteFileA("test4.txt\\two.txt");
+    DeleteFileA("testdir2\\one.txt");
+    DeleteFileA("testdir2\\two.txt");
+    RemoveDirectoryA("test4.txt");
+    RemoveDirectoryA("testdir2");
+
+}
+
 START_TEST(shlfileop)
 {
     clean_after_shfo_tests();
@@ -2742,4 +2805,6 @@ START_TEST(shlfileop)
     test_unicode();
 
     test_shlmenu();
+
+    test_move_wildchar();
 }
-- 
2.26.0




More information about the wine-devel mailing list