Commit c2d3ed24 authored by Paul Vriens's avatar Paul Vriens Committed by Alexandre Julliard

shell32/tests: Fix test failures on Win9x, NT4 and Vista (FO_RENAME).

parent bb7efb1d
......@@ -35,10 +35,12 @@
/* Error codes could be pre-Win32 */
#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");
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
if (0)
{
shfo.pFrom = NULL;
retval = SHFileOperationA(&shfo);
ok(retval == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", retval);
#endif
}
}
/* tests the FO_COPY action */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment