From: Florian Eder Subject: [PATCH 36/41] robocopy/tests: add conformance tests for /XX, /XL, /XC Message-Id: <20210906145518.346132-36-others.meder@gmail.com> Date: Mon, 6 Sep 2021 14:55:13 +0000 In-Reply-To: <20210906145518.346132-1-others.meder@gmail.com> References: <20210906145518.346132-1-others.meder@gmail.com> Signed-off-by: Florian Eder --- programs/robocopy/tests/robocopy.c | 205 +++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) diff --git a/programs/robocopy/tests/robocopy.c b/programs/robocopy/tests/robocopy.c index 54aed2233ca..94911cfe632 100644 --- a/programs/robocopy/tests/robocopy.c +++ b/programs/robocopy/tests/robocopy.c @@ -866,6 +866,141 @@ static void check_xo_test(void) check_folder_and_delete(L"robocopy_destination", TRUE); } +static void check_xc_test(void) +{ + check_files_equal(L"robocopy_source\\fileA.a", L"robocopy_destination\\fileA.a", TRUE); + check_files_equal(L"robocopy_source\\folderB\\fileF.f", L"robocopy_destination\\folderB\\fileF.f", FALSE); + + check_file_and_delete(L"robocopy_source\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_source\\fileB.b", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileC.c", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileD.d", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\folderD\\fileE.e", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileG.g", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderD", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderE", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA", TRUE); + check_folder_and_delete(L"robocopy_source\\folderB", TRUE); + check_folder_and_delete(L"robocopy_source\\folderC", TRUE); + check_folder_and_delete(L"robocopy_source", TRUE); + + check_file_and_delete(L"robocopy_destination\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_destination\\fileB.b", TRUE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileC.c", TRUE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileD.d", TRUE); + check_file_and_delete(L"robocopy_destination\\folderA\\folderD\\fileE.e", TRUE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileG.g", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderD", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderE", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderA", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderB", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderC", TRUE); + check_folder_and_delete(L"robocopy_destination", TRUE); +} + +static void check_xx_test(void) +{ + check_file_and_delete(L"robocopy_source\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_source\\fileB.b", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileC.c", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileD.d", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\folderD\\fileE.e", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileG.g", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderD", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderE", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA", TRUE); + check_folder_and_delete(L"robocopy_source\\folderB", TRUE); + check_folder_and_delete(L"robocopy_source\\folderC", TRUE); + check_folder_and_delete(L"robocopy_source", TRUE); + + check_file_and_delete(L"robocopy_destination\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_destination\\fileB.b", TRUE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileC.c", TRUE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileD.d", TRUE); + check_file_and_delete(L"robocopy_destination\\folderA\\folderD\\fileE.e", TRUE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileG.g", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderD", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderE", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderB", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderC", FALSE); + check_file_and_delete(L"robocopy_destination\\extraFile1", TRUE); + check_file_and_delete(L"robocopy_destination\\extraFolder1\\extraFile2", TRUE); + check_folder_and_delete(L"robocopy_destination\\extraFolder1", TRUE); + check_folder_and_delete(L"robocopy_destination\\extraFolder2", TRUE); + check_folder_and_delete(L"robocopy_destination", TRUE); +} + +static void check_xl_1_test(void) +{ + check_file_and_delete(L"robocopy_source\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_source\\fileB.b", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileC.c", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileD.d", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\folderD\\fileE.e", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileG.g", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderD", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderE", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA", TRUE); + check_folder_and_delete(L"robocopy_source\\folderB", TRUE); + check_folder_and_delete(L"robocopy_source\\folderC", TRUE); + check_folder_and_delete(L"robocopy_source", TRUE); + + check_file_and_delete(L"robocopy_destination\\fileA.a", FALSE); + check_file_and_delete(L"robocopy_destination\\fileB.b", FALSE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileC.c", FALSE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileD.d", FALSE); + check_file_and_delete(L"robocopy_destination\\folderA\\folderD\\fileE.e", FALSE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileF.f", FALSE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileG.g", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderD", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderE", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderB", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderC", FALSE); + check_folder_and_delete(L"robocopy_destination", TRUE); +} + +static void check_xl_2_test(void) +{ + check_files_equal(L"robocopy_source\\fileA.a", L"robocopy_destination\\fileA.a", TRUE); + check_files_equal(L"robocopy_source\\folderB\\fileF.f", L"robocopy_destination\\folderB\\fileF.f", TRUE); + + check_file_and_delete(L"robocopy_source\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_source\\fileB.b", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileC.c", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\fileD.d", TRUE); + check_file_and_delete(L"robocopy_source\\folderA\\folderD\\fileE.e", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_source\\folderB\\fileG.g", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderD", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA\\folderE", TRUE); + check_folder_and_delete(L"robocopy_source\\folderA", TRUE); + check_folder_and_delete(L"robocopy_source\\folderB", TRUE); + check_folder_and_delete(L"robocopy_source\\folderC", TRUE); + check_folder_and_delete(L"robocopy_source", TRUE); + + check_file_and_delete(L"robocopy_destination\\fileA.a", TRUE); + check_file_and_delete(L"robocopy_destination\\fileB.b", FALSE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileC.c", FALSE); + check_file_and_delete(L"robocopy_destination\\folderA\\fileD.d", FALSE); + check_file_and_delete(L"robocopy_destination\\folderA\\folderD\\fileE.e", FALSE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileF.f", TRUE); + check_file_and_delete(L"robocopy_destination\\folderB\\fileG.g", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderD", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA\\folderE", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderA", FALSE); + check_folder_and_delete(L"robocopy_destination\\folderB", TRUE); + check_folder_and_delete(L"robocopy_destination\\folderC", FALSE); + check_file_and_delete(L"robocopy_destination\\extraFile", FALSE); + check_folder_and_delete(L"robocopy_destination", TRUE); +} + START_TEST(robocopy) { WCHAR temp_command_line[2048], previous_cwd_path[4096], temp_path[4096]; @@ -1158,6 +1293,76 @@ START_TEST(robocopy) check_xo_test(); winetest_pop_context(); + winetest_push_context("XC test 1"); + create_test_source_folder(); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /mir /xc /r:1 /w:0", 1); + check_mir_test(); + winetest_pop_context(); + + winetest_push_context("XC test 2"); + create_test_source_folder(); + create_test_folder(L"robocopy_destination"); + create_test_file(L"robocopy_destination\\fileA.a", 1000, 0, -50); + create_test_folder(L"robocopy_destination\\folderB"); + create_test_file(L"robocopy_destination\\folderB\\fileF.f", 1000, 132223104000000000, 0); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /mir /xc /r:1 /w:0", 1); + check_xc_test(); + winetest_pop_context(); + + winetest_push_context("XC test 3"); + create_test_source_folder(); + create_test_folder(L"robocopy_destination"); + create_test_file(L"robocopy_destination\\fileA.a", 1000, 0, -50); + create_test_folder(L"robocopy_destination\\folderB"); + create_test_file(L"robocopy_destination\\folderB\\fileF.f", 1000, 132223104000000000, 0); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /s /e /xc /r:1 /w:0", 1); + check_xc_test(); + winetest_pop_context(); + + winetest_push_context("XX test 1"); + create_test_source_folder(); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /mir /xx /r:1 /w:0", 1); + check_mir_test(); + winetest_pop_context(); + + winetest_push_context("XX test 2"); + create_test_source_folder(); + create_test_folder(L"robocopy_destination"); + create_test_file(L"robocopy_destination\\fileA.a", 9000, 0, -10); + create_test_folder(L"robocopy_destination\\folderB"); + create_test_file(L"robocopy_destination\\folderB\\fileF.f", 9000, 0, -10); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /mir /xx /r:1 /w:0", 1); + check_mir_test(); + winetest_pop_context(); + + winetest_push_context("XX test 3"); + create_test_source_folder(); + create_test_folder(L"robocopy_destination"); + create_test_file(L"robocopy_destination\\extraFile1", 9000, 0, -20); + create_test_folder(L"robocopy_destination\\extraFolder1"); + create_test_folder(L"robocopy_destination\\extraFolder2"); + create_test_file(L"robocopy_destination\\extraFolder1\\extraFile2", 9000, 0, -20); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /purge /s /lev:100 /xx /r:1 /w:0", 3); + check_xx_test(); + winetest_pop_context(); + + winetest_push_context("XL test 1"); + create_test_source_folder(); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /mir /xl /r:1 /w:0", 0); + check_xl_1_test(); + winetest_pop_context(); + + winetest_push_context("XL test 2"); + create_test_source_folder(); + create_test_folder(L"robocopy_destination"); + create_test_file(L"robocopy_destination\\extraFile", 9000, 0, -20); + create_test_file(L"robocopy_destination\\fileA.a", 9000, 0, -20); + create_test_folder(L"robocopy_destination\\folderB"); + create_test_file(L"robocopy_destination\\folderB\\fileF.f", 9000, 0, -20); + execute_robocopy(L"robocopy.exe robocopy_source robocopy_destination /mir /xl /r:1 /w:0", 3); + check_xl_2_test(); + winetest_pop_context(); + /* Reset CWD to previous folder */ ok(SetCurrentDirectoryW(previous_cwd_path), "couldn't set CWD to previous CWD folder \"%S\"", previous_cwd_path); } \ No newline at end of file -- 2.32.0