[PATCH 36/41] robocopy/tests: add conformance tests for /XX, /XL, /XC
Florian Eder
others.meder at gmail.com
Mon Sep 6 09:55:13 CDT 2021
Signed-off-by: Florian Eder <others.meder at gmail.com>
---
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
More information about the wine-devel
mailing list