From c2d3ed244df4065f4550a56b298309df931ec656 Mon Sep 17 00:00:00 2001 From: Paul Vriens Date: Thu, 8 Jan 2009 11:28:35 +0100 Subject: [PATCH] shell32/tests: Fix test failures on Win9x, NT4 and Vista (FO_RENAME). --- dlls/shell32/tests/shlfileop.c | 105 ++++++++++++++++++++++----------- 1 file changed, 71 insertions(+), 34 deletions(-) diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c index 6adced60deb..38caaf3c830 100644 --- a/dlls/shell32/tests/shlfileop.c +++ b/dlls/shell32/tests/shlfileop.c @@ -33,12 +33,14 @@ #endif /* Error codes could be pre-Win32 */ -#define DE_SAMEFILE 0x71 -#define DE_MANYSRC1DEST 0x72 -#define DE_OPCANCELLED 0x75 -#define DE_DESTSUBTREE 0x76 -#define DE_INVALIDFILES 0x7C -#define DE_DESTSAMETREE 0x7D +#define DE_SAMEFILE 0x71 +#define DE_MANYSRC1DEST 0x72 +#define DE_DIFFDIR 0x73 +#define DE_OPCANCELLED 0x75 +#define DE_DESTSUBTREE 0x76 +#define DE_INVALIDFILES 0x7C +#define DE_DESTSAMETREE 0x7D +#define DE_FILEDESTISFLD 0x80 #define expect_retval(ret, ret_prewin32)\ ok(retval == ret ||\ broken(retval == ret_prewin32),\ @@ -614,20 +616,34 @@ static void test_rename(void) set_curr_dir_path(from, "test1.txt\0"); set_curr_dir_path(to, "test4.txt\0"); - ok(SHFileOperationA(&shfo), "File is not renamed moving to other directory " - "when specifying directory name only\n"); - ok(file_exists("test1.txt"), "The file is removed\n"); + retval = SHFileOperationA(&shfo); + ok(retval == ERROR_ALREADY_EXISTS || + retval == DE_FILEDESTISFLD || /* Vista */ + broken(retval == ERROR_INVALID_NAME), /* Win9x, NT4 */ + "Expected ERROR_ALREADY_EXISTS or DE_FILEDESTISFLD, got %d\n", retval); + ok(file_exists("test1.txt"), "The file is renamed\n"); set_curr_dir_path(from, "test3.txt\0"); set_curr_dir_path(to, "test4.txt\\test1.txt\0"); - ok(!SHFileOperationA(&shfo), "File is renamed moving to other directory\n"); - ok(file_exists("test4.txt\\test1.txt"), "The file is not renamed\n"); + retval = SHFileOperationA(&shfo); + if (retval == DE_DIFFDIR) + { + /* Vista and W2K8 (broken or new behavior ?) */ + ok(!file_exists("test4.txt\\test1.txt"), "The file is renamed\n"); + } + else + { + ok(retval == ERROR_SUCCESS, "File is renamed moving to other directory\n"); + ok(file_exists("test4.txt\\test1.txt"), "The file is not renamed\n"); + } set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - retval = SHFileOperationA(&shfo); /* W98 returns 0, W2K and newer returns ERROR_GEN_FAILURE, both do nothing */ - ok(!retval || retval == ERROR_GEN_FAILURE || retval == ERROR_INVALID_TARGET_HANDLE, - "Can't rename many files, retval = %d\n", retval); + retval = SHFileOperationA(&shfo); + ok(retval == ERROR_GEN_FAILURE || + retval == DE_MANYSRC1DEST || /* Vista */ + broken(retval == ERROR_SUCCESS), /* Win9x */ + "Expected ERROR_GEN_FAILURE or DE_MANYSRC1DEST , got %d\n", retval); ok(file_exists("test1.txt"), "The file is renamed - many files are specified\n"); memcpy(&shfo2, &shfo, sizeof(SHFILEOPSTRUCTA)); @@ -635,34 +651,37 @@ static void test_rename(void) set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - retval = SHFileOperationA(&shfo2); /* W98 returns 0, W2K and newer returns ERROR_GEN_FAILURE, both do nothing */ - ok(!retval || retval == ERROR_GEN_FAILURE || retval == ERROR_INVALID_TARGET_HANDLE, - "Can't rename many files, retval = %d\n", retval); + retval = SHFileOperationA(&shfo2); + ok(retval == ERROR_GEN_FAILURE || + retval == DE_MANYSRC1DEST || /* Vista */ + broken(retval == ERROR_SUCCESS), /* Win9x */ + "Expected ERROR_GEN_FAILURE or DE_MANYSRC1DEST files, got %d\n", retval); ok(file_exists("test1.txt"), "The file is not renamed - many files are specified\n"); set_curr_dir_path(from, "test1.txt\0"); set_curr_dir_path(to, "test6.txt\0"); retval = SHFileOperationA(&shfo); - ok(!retval, "Rename file failed, retval = %d\n", retval); + ok(retval == ERROR_SUCCESS, "Rename file failed, retval = %d\n", retval); ok(!file_exists("test1.txt"), "The file is not renamed\n"); ok(file_exists("test6.txt"), "The file is not renamed\n"); set_curr_dir_path(from, "test6.txt\0"); set_curr_dir_path(to, "test1.txt\0"); retval = SHFileOperationA(&shfo); - ok(!retval, "Rename file back failed, retval = %d\n", retval); + ok(retval == ERROR_SUCCESS, "Rename file back failed, retval = %d\n", retval); set_curr_dir_path(from, "test4.txt\0"); set_curr_dir_path(to, "test6.txt\0"); retval = SHFileOperationA(&shfo); - ok(!retval, "Rename dir failed, retval = %d\n", retval); - ok(!file_exists("test4.txt"), "The dir is not renamed\n"); - ok(file_exists("test6.txt"), "The dir is not renamed\n"); + ok(retval == ERROR_SUCCESS, "Rename dir failed, retval = %d\n", retval); + ok(!dir_exists("test4.txt"), "The dir is not renamed\n"); + ok(dir_exists("test6.txt"), "The dir is not renamed\n"); set_curr_dir_path(from, "test6.txt\0"); set_curr_dir_path(to, "test4.txt\0"); retval = SHFileOperationA(&shfo); - ok(!retval, "Rename dir back failed, retval = %d\n", retval); + ok(retval == ERROR_SUCCESS, "Rename dir back failed, retval = %d\n", retval); + ok(dir_exists("test4.txt"), "The dir is not renamed\n"); /* try to rename more than one file to a single file */ shfo.pFrom = "test1.txt\0test2.txt\0"; @@ -670,7 +689,7 @@ static void test_rename(void) retval = SHFileOperationA(&shfo); ok(retval == ERROR_GEN_FAILURE || retval == DE_MANYSRC1DEST || /* Vista */ - broken(!retval), /* Win9x */ + broken(retval == ERROR_SUCCESS), /* Win9x */ "Expected ERROR_GEN_FAILURE or DE_MANYSRC1DEST, got %d\n", retval); ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); ok(file_exists("test2.txt"), "Expected test2.txt to exist\n"); @@ -681,7 +700,8 @@ static void test_rename(void) shfo.pTo = "newfile\0"; retval = SHFileOperationA(&shfo); ok(retval == 1026 || - retval == ERROR_FILE_NOT_FOUND, /* Vista */ + retval == ERROR_FILE_NOT_FOUND || /* Vista */ + broken(retval == ERROR_SUCCESS), /* NT4 */ "Expected 1026 or ERROR_FILE_NOT_FOUND, got %d\n", retval); ok(!file_exists("newfile"), "Expected newfile to not exist\n"); @@ -689,28 +709,45 @@ static void test_rename(void) shfo.pFrom = "test1.txt\0"; shfo.pTo = "test2.txt\0"; retval = SHFileOperationA(&shfo); - ok(retval == ERROR_ALREADY_EXISTS, "Expected ERROR_ALREADY_EXISTS, got %d\n", retval); + if (retval == ERROR_SUCCESS) + { + /* Vista and W2K8 (broken or new behavior ?) */ + createTestFile("test1.txt"); + } + else + { + ok(retval == ERROR_ALREADY_EXISTS || + broken(retval == DE_OPCANCELLED) || /* NT4 */ + broken(retval == ERROR_INVALID_NAME), /* Win9x */ + "Expected ERROR_ALREADY_EXISTS, got %d\n", retval); + } /* pFrom is valid, but pTo is empty */ shfo.pFrom = "test1.txt\0"; shfo.pTo = "\0"; retval = SHFileOperationA(&shfo); - expect_retval(ERROR_CANCELLED, DE_OPCANCELLED /* Win9x */); + ok(retval == ERROR_CANCELLED || + retval == DE_DIFFDIR || /* Vista */ + broken(retval == DE_OPCANCELLED) || /* Win9x */ + broken(retval == 65652), /* NT4 */ + "Expected ERROR_CANCELLED or DE_DIFFDIR\n"); ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); /* pFrom is empty */ shfo.pFrom = "\0"; retval = SHFileOperationA(&shfo); ok(retval == ERROR_ACCESS_DENIED || - retval == ERROR_INVALID_TARGET_HANDLE, /* Vista */ - "Expected ERROR_ACCESS_DENIED or ERROR_INVALID_TARGET_HANDLE, got %d\n", retval); + retval == DE_MANYSRC1DEST || /* Vista */ + broken(retval == ERROR_SUCCESS), /* Win9x */ + "Expected ERROR_ACCESS_DENIED or DE_MANYSRC1DEST, got %d\n", retval); /* pFrom is NULL, commented out because it crashes on nt 4.0 */ -#if 0 - shfo.pFrom = NULL; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", retval); -#endif + if (0) + { + shfo.pFrom = NULL; + retval = SHFileOperationA(&shfo); + ok(retval == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", retval); + } } /* tests the FO_COPY action */