From bca0aa08f7a14fb16da0dae0e693c8334709a4c0 Mon Sep 17 00:00:00 2001 From: Christopher Dryden Date: Wed, 10 Dec 2025 04:17:17 +0000 Subject: [PATCH] Adding test to cover no dereference when copying symlinks --- tests/by-util/test_cp.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/by-util/test_cp.rs b/tests/by-util/test_cp.rs index c6f0d1c77..7562eab38 100644 --- a/tests/by-util/test_cp.rs +++ b/tests/by-util/test_cp.rs @@ -7118,6 +7118,25 @@ fn test_cp_no_dereference_symlink_with_parents() { assert_eq!(at.resolve_link("x/symlink-to-directory"), "directory"); } +#[test] +#[cfg(unix)] +fn test_cp_recursive_no_dereference_symlink_to_directory() { + let ts = TestScenario::new(util_name!()); + let at = &ts.fixtures; + + at.mkdir("source_dir"); + at.touch("source_dir/file.txt"); + at.symlink_file("source_dir", "symlink_to_dir"); + + // Copy with -r --no-dereference (or -rP): should copy the symlink, not the directory contents + ts.ucmd() + .args(&["-r", "--no-dereference", "symlink_to_dir", "dest"]) + .succeeds(); + + assert!(at.is_symlink("dest")); + assert_eq!(at.resolve_link("dest"), "source_dir"); +} + #[test] #[cfg(unix)] fn test_cp_recursive_files_ending_in_backslash() {