From 17f9507e17967738e6ed9d5b9385c998de2c5537 Mon Sep 17 00:00:00 2001 From: Thayne McCombs Date: Mon, 13 Feb 2023 02:00:03 -0700 Subject: [PATCH] Add tests for non-utf8 --- tests/by-util/test_chown.rs | 8 ++-- tests/by-util/test_chroot.rs | 2 +- tests/by-util/test_cp.rs | 82 +++++++++++++++++++++++++--------- tests/by-util/test_install.rs | 58 ++++++++++++------------ tests/by-util/test_ln.rs | 2 +- tests/by-util/test_ls.rs | 72 ++++++++++++++--------------- tests/by-util/test_mv.rs | 56 +++++++++++------------ tests/by-util/test_realpath.rs | 2 +- tests/common/util.rs | 14 +++--- 9 files changed, 170 insertions(+), 126 deletions(-) diff --git a/tests/by-util/test_chown.rs b/tests/by-util/test_chown.rs index 5237a7cf7..92ee55b1c 100644 --- a/tests/by-util/test_chown.rs +++ b/tests/by-util/test_chown.rs @@ -662,10 +662,10 @@ fn test_chown_recursive() { at.mkdir_all("a/b/c"); at.mkdir("z"); - at.touch(&at.plus_as_string("a/a")); - at.touch(&at.plus_as_string("a/b/b")); - at.touch(&at.plus_as_string("a/b/c/c")); - at.touch(&at.plus_as_string("z/y")); + at.touch(at.plus_as_string("a/a")); + at.touch(at.plus_as_string("a/b/b")); + at.touch(at.plus_as_string("a/b/c/c")); + at.touch(at.plus_as_string("z/y")); let result = scene .ucmd() diff --git a/tests/by-util/test_chroot.rs b/tests/by-util/test_chroot.rs index c7e786f93..0e3468720 100644 --- a/tests/by-util/test_chroot.rs +++ b/tests/by-util/test_chroot.rs @@ -39,7 +39,7 @@ fn test_enter_chroot_fails() { fn test_no_such_directory() { let (at, mut ucmd) = at_and_ucmd!(); - at.touch(&at.plus_as_string("a")); + at.touch(at.plus_as_string("a")); ucmd.arg("a") .fails() diff --git a/tests/by-util/test_cp.rs b/tests/by-util/test_cp.rs index e6e8a6ba2..818261220 100644 --- a/tests/by-util/test_cp.rs +++ b/tests/by-util/test_cp.rs @@ -15,11 +15,15 @@ use std::os::unix::fs::PermissionsExt; use std::os::windows::fs::symlink_file; #[cfg(not(windows))] use std::path::Path; +#[cfg(target_os = "linux")] +use std::path::PathBuf; #[cfg(any(target_os = "linux", target_os = "android"))] use filetime::FileTime; #[cfg(any(target_os = "linux", target_os = "android"))] use rlimit::Resource; +#[cfg(target_os = "linux")] +use std::ffi::OsString; #[cfg(any(target_os = "linux", target_os = "android"))] use std::fs as std_fs; use std::thread::sleep; @@ -91,7 +95,7 @@ fn test_cp_existing_target() { assert_eq!(at.read(TEST_EXISTING_FILE), "Hello, World!\n"); // No backup should have been created - assert!(!at.file_exists(&format!("{TEST_EXISTING_FILE}~"))); + assert!(!at.file_exists(format!("{TEST_EXISTING_FILE}~"))); } #[test] @@ -636,7 +640,7 @@ fn test_cp_backup_none() { .no_stderr(); assert_eq!(at.read(TEST_HOW_ARE_YOU_SOURCE), "Hello, World!\n"); - assert!(!at.file_exists(&format!("{TEST_HOW_ARE_YOU_SOURCE}~"))); + assert!(!at.file_exists(format!("{TEST_HOW_ARE_YOU_SOURCE}~"))); } #[test] @@ -650,7 +654,7 @@ fn test_cp_backup_off() { .no_stderr(); assert_eq!(at.read(TEST_HOW_ARE_YOU_SOURCE), "Hello, World!\n"); - assert!(!at.file_exists(&format!("{TEST_HOW_ARE_YOU_SOURCE}~"))); + assert!(!at.file_exists(format!("{TEST_HOW_ARE_YOU_SOURCE}~"))); } #[test] @@ -700,7 +704,7 @@ fn test_cp_deref() { .join(TEST_HELLO_WORLD_SOURCE_SYMLINK); // unlike -P/--no-deref, we expect a file, not a link assert!(at.file_exists( - &path_to_new_symlink + path_to_new_symlink .clone() .into_os_string() .into_string() @@ -1062,7 +1066,7 @@ fn test_cp_deref_folder_to_folder() { .join(TEST_COPY_TO_FOLDER_NEW) .join(TEST_HELLO_WORLD_SOURCE_SYMLINK); assert!(at.file_exists( - &path_to_new_symlink + path_to_new_symlink .clone() .into_os_string() .into_string() @@ -1225,8 +1229,8 @@ fn test_cp_archive_recursive() { let file_2 = at.subdir.join(TEST_COPY_TO_FOLDER).join("2"); let file_2_link = at.subdir.join(TEST_COPY_TO_FOLDER).join("2.link"); - at.touch(&file_1.to_string_lossy()); - at.touch(&file_2.to_string_lossy()); + at.touch(file_1); + at.touch(file_2); at.symlink_file("1", &file_1_link.to_string_lossy()); at.symlink_file("2", &file_2_link.to_string_lossy()); @@ -1252,18 +1256,8 @@ fn test_cp_archive_recursive() { .run(); println!("ls dest {}", result.stdout_str()); - assert!(at.file_exists( - &at.subdir - .join(TEST_COPY_TO_FOLDER_NEW) - .join("1") - .to_string_lossy() - )); - assert!(at.file_exists( - &at.subdir - .join(TEST_COPY_TO_FOLDER_NEW) - .join("2") - .to_string_lossy() - )); + assert!(at.file_exists(at.subdir.join(TEST_COPY_TO_FOLDER_NEW).join("1"))); + assert!(at.file_exists(at.subdir.join(TEST_COPY_TO_FOLDER_NEW).join("2"))); assert!(at.is_symlink( &at.subdir @@ -1672,7 +1666,7 @@ fn test_cp_reflink_always_override() { let dst_path: &str = &vec![MOUNTPOINT, USERDIR, "dst"].concat(); scene.fixtures.mkdir(ROOTDIR); - scene.fixtures.mkdir(&vec![ROOTDIR, USERDIR].concat()); + scene.fixtures.mkdir(vec![ROOTDIR, USERDIR].concat()); // Setup: // Because neither `mkfs.btrfs` not btrfs `mount` options allow us to have a mountpoint owned @@ -2532,3 +2526,51 @@ fn test_src_base_dot() { .no_stdout(); assert!(!at.dir_exists("y/x")); } + +#[cfg(target_os = "linux")] +fn non_utf8_name(suffix: &str) -> OsString { + use std::os::unix::ffi::OsStringExt; + let mut name = OsString::from_vec(vec![0xff, 0xff]); + name.push(suffix); + name +} + +#[cfg(target_os = "linux")] +#[test] +fn test_non_utf8_src() { + let (at, mut ucmd) = at_and_ucmd!(); + let src = non_utf8_name("src"); + std::fs::File::create(at.plus(&src)).unwrap(); + ucmd.args(&[src, "dest".into()]) + .succeeds() + .no_stderr() + .no_stdout(); + assert!(at.file_exists("dest")); +} + +#[cfg(target_os = "linux")] +#[test] +fn test_non_utf8_dest() { + let (at, mut ucmd) = at_and_ucmd!(); + let dest = non_utf8_name("dest"); + ucmd.args(&[TEST_HELLO_WORLD_SOURCE.as_ref(), &*dest]) + .succeeds() + .no_stderr() + .no_stdout(); + assert!(at.file_exists(dest)); +} + +#[cfg(target_os = "linux")] +#[test] +fn test_non_utf8_target() { + let (at, mut ucmd) = at_and_ucmd!(); + let dest = non_utf8_name("dest"); + at.mkdir(&dest); + ucmd.args(&["-t".as_ref(), &*dest, TEST_HELLO_WORLD_SOURCE.as_ref()]) + .succeeds() + .no_stderr() + .no_stdout(); + let mut copied_file = PathBuf::from(dest); + copied_file.push(TEST_HELLO_WORLD_SOURCE); + assert!(at.file_exists(copied_file)); +} diff --git a/tests/by-util/test_install.rs b/tests/by-util/test_install.rs index e041fb081..133f1381d 100644 --- a/tests/by-util/test_install.rs +++ b/tests/by-util/test_install.rs @@ -28,8 +28,8 @@ fn test_install_basic() { assert!(at.file_exists(file1)); assert!(at.file_exists(file2)); - assert!(at.file_exists(&format!("{dir}/{file1}"))); - assert!(at.file_exists(&format!("{dir}/{file2}"))); + assert!(at.file_exists(format!("{dir}/{file1}"))); + assert!(at.file_exists(format!("{dir}/{file2}"))); } #[test] @@ -76,7 +76,7 @@ fn test_install_unimplemented_arg() { .fails() .stderr_contains("Unimplemented"); - assert!(!at.file_exists(&format!("{dir}/{file}"))); + assert!(!at.file_exists(format!("{dir}/{file}"))); } #[test] @@ -314,7 +314,7 @@ fn test_install_target_new_file() { .no_stderr(); assert!(at.file_exists(file)); - assert!(at.file_exists(&format!("{dir}/{file}"))); + assert!(at.file_exists(format!("{dir}/{file}"))); } #[test] @@ -341,7 +341,7 @@ fn test_install_target_new_file_with_group() { result.success(); assert!(at.file_exists(file)); - assert!(at.file_exists(&format!("{dir}/{file}"))); + assert!(at.file_exists(format!("{dir}/{file}"))); } #[test] @@ -368,7 +368,7 @@ fn test_install_target_new_file_with_owner() { result.success(); assert!(at.file_exists(file)); - assert!(at.file_exists(&format!("{dir}/{file}"))); + assert!(at.file_exists(format!("{dir}/{file}"))); } #[test] @@ -447,13 +447,13 @@ fn test_install_nested_paths_copy_file() { at.mkdir(dir1); at.mkdir(dir2); - at.touch(&format!("{dir1}/{file1}")); + at.touch(format!("{dir1}/{file1}")); ucmd.arg(format!("{dir1}/{file1}")) .arg(dir2) .succeeds() .no_stderr(); - assert!(at.file_exists(&format!("{dir2}/{file1}"))); + assert!(at.file_exists(format!("{dir2}/{file1}"))); } #[test] @@ -487,7 +487,7 @@ fn test_install_failing_omitting_directory() { .fails() .code_is(1) .stderr_contains("omitting directory"); - assert!(at.file_exists(&format!("{dir3}/{file1}"))); + assert!(at.file_exists(format!("{dir3}/{file1}"))); // install also fails, when only one source param is given scene @@ -785,7 +785,7 @@ fn test_install_creating_leading_dirs_with_single_source_and_target_dir() { .succeeds() .no_stderr(); - assert!(at.file_exists(&format!("{target_dir}/{source1}"))); + assert!(at.file_exists(format!("{target_dir}/{source1}"))); } #[test] @@ -863,8 +863,8 @@ fn test_install_dir() { assert!(at.file_exists(file1)); assert!(at.file_exists(file2)); - assert!(at.file_exists(&format!("{dir}/{file1}"))); - assert!(at.file_exists(&format!("{dir}/{file2}"))); + assert!(at.file_exists(format!("{dir}/{file1}"))); + assert!(at.file_exists(format!("{dir}/{file2}"))); } // // test backup functionality @@ -888,7 +888,7 @@ fn test_install_backup_short_no_args_files() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -913,7 +913,7 @@ fn test_install_backup_short_no_args_file_to_dir() { assert!(at.file_exists(file)); assert!(at.file_exists(&expect)); - assert!(at.file_exists(&format!("{expect}~"))); + assert!(at.file_exists(format!("{expect}~"))); } // Long --backup option is tested separately as it requires a slightly different @@ -938,7 +938,7 @@ fn test_install_backup_long_no_args_files() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -963,7 +963,7 @@ fn test_install_backup_long_no_args_file_to_dir() { assert!(at.file_exists(file)); assert!(at.file_exists(&expect)); - assert!(at.file_exists(&format!("{expect}~"))); + assert!(at.file_exists(format!("{expect}~"))); } #[test] @@ -988,7 +988,7 @@ fn test_install_backup_short_custom_suffix() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}{suffix}"))); + assert!(at.file_exists(format!("{file_b}{suffix}"))); } #[test] @@ -1013,7 +1013,7 @@ fn test_install_backup_short_custom_suffix_hyphen_value() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}{suffix}"))); + assert!(at.file_exists(format!("{file_b}{suffix}"))); } #[test] @@ -1038,7 +1038,7 @@ fn test_install_backup_custom_suffix_via_env() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}{suffix}"))); + assert!(at.file_exists(format!("{file_b}{suffix}"))); } #[test] @@ -1061,7 +1061,7 @@ fn test_install_backup_numbered_with_t() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}.~1~"))); + assert!(at.file_exists(format!("{file_b}.~1~"))); } #[test] @@ -1084,7 +1084,7 @@ fn test_install_backup_numbered_with_numbered() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}.~1~"))); + assert!(at.file_exists(format!("{file_b}.~1~"))); } #[test] @@ -1107,7 +1107,7 @@ fn test_install_backup_existing() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -1130,7 +1130,7 @@ fn test_install_backup_nil() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -1156,7 +1156,7 @@ fn test_install_backup_numbered_if_existing_backup_existing() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); assert!(at.file_exists(file_b_backup)); - assert!(at.file_exists(&format!("{file_b}.~2~"))); + assert!(at.file_exists(format!("{file_b}.~2~"))); } #[test] @@ -1182,7 +1182,7 @@ fn test_install_backup_numbered_if_existing_backup_nil() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); assert!(at.file_exists(file_b_backup)); - assert!(at.file_exists(&format!("{file_b}.~2~"))); + assert!(at.file_exists(format!("{file_b}.~2~"))); } #[test] @@ -1205,7 +1205,7 @@ fn test_install_backup_simple() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -1228,7 +1228,7 @@ fn test_install_backup_never() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -1251,7 +1251,7 @@ fn test_install_backup_none() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(!at.file_exists(&format!("{file_b}~"))); + assert!(!at.file_exists(format!("{file_b}~"))); } #[test] @@ -1274,7 +1274,7 @@ fn test_install_backup_off() { assert!(at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(!at.file_exists(&format!("{file_b}~"))); + assert!(!at.file_exists(format!("{file_b}~"))); } #[test] diff --git a/tests/by-util/test_ln.rs b/tests/by-util/test_ln.rs index bc51fc107..1a4c9095b 100644 --- a/tests/by-util/test_ln.rs +++ b/tests/by-util/test_ln.rs @@ -403,7 +403,7 @@ fn test_symlink_implicit_target_dir() { let file = &path.to_string_lossy(); at.mkdir(dir); - at.touch(file); + at.touch(&path); ucmd.args(&["-s", file]).succeeds().no_stderr(); diff --git a/tests/by-util/test_ls.rs b/tests/by-util/test_ls.rs index 339c78c12..36ae816b3 100644 --- a/tests/by-util/test_ls.rs +++ b/tests/by-util/test_ls.rs @@ -609,10 +609,10 @@ fn test_ls_a() { fn test_ls_width() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-width-1")); - at.touch(&at.plus_as_string("test-width-2")); - at.touch(&at.plus_as_string("test-width-3")); - at.touch(&at.plus_as_string("test-width-4")); + at.touch(at.plus_as_string("test-width-1")); + at.touch(at.plus_as_string("test-width-2")); + at.touch(at.plus_as_string("test-width-3")); + at.touch(at.plus_as_string("test-width-4")); for option in [ "-w 100", @@ -692,10 +692,10 @@ fn test_ls_width() { fn test_ls_columns() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-columns-1")); - at.touch(&at.plus_as_string("test-columns-2")); - at.touch(&at.plus_as_string("test-columns-3")); - at.touch(&at.plus_as_string("test-columns-4")); + at.touch(at.plus_as_string("test-columns-1")); + at.touch(at.plus_as_string("test-columns-2")); + at.touch(at.plus_as_string("test-columns-3")); + at.touch(at.plus_as_string("test-columns-4")); // Columns is the default let result = scene.ucmd().succeeds(); @@ -753,10 +753,10 @@ fn test_ls_columns() { fn test_ls_across() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-across-1")); - at.touch(&at.plus_as_string("test-across-2")); - at.touch(&at.plus_as_string("test-across-3")); - at.touch(&at.plus_as_string("test-across-4")); + at.touch(at.plus_as_string("test-across-1")); + at.touch(at.plus_as_string("test-across-2")); + at.touch(at.plus_as_string("test-across-3")); + at.touch(at.plus_as_string("test-across-4")); for option in ACROSS_ARGS { let result = scene.ucmd().arg(option).succeeds(); @@ -781,10 +781,10 @@ fn test_ls_across() { fn test_ls_commas() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-commas-1")); - at.touch(&at.plus_as_string("test-commas-2")); - at.touch(&at.plus_as_string("test-commas-3")); - at.touch(&at.plus_as_string("test-commas-4")); + at.touch(at.plus_as_string("test-commas-1")); + at.touch(at.plus_as_string("test-commas-2")); + at.touch(at.plus_as_string("test-commas-3")); + at.touch(at.plus_as_string("test-commas-4")); for option in COMMA_ARGS { let result = scene.ucmd().arg(option).succeeds(); @@ -814,8 +814,8 @@ fn test_ls_zero() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; at.mkdir("0-test-zero"); - at.touch(&at.plus_as_string("2-test-zero")); - at.touch(&at.plus_as_string("3-test-zero")); + at.touch(at.plus_as_string("2-test-zero")); + at.touch(at.plus_as_string("3-test-zero")); let ignored_opts = [ "--quoting-style=c", @@ -870,7 +870,7 @@ fn test_ls_zero() { #[cfg(unix)] { - at.touch(&at.plus_as_string("1\ntest-zero")); + at.touch(at.plus_as_string("1\ntest-zero")); let ignored_opts = [ "--quoting-style=c", @@ -933,9 +933,9 @@ fn test_ls_zero() { fn test_ls_commas_trailing() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-commas-trailing-2")); + at.touch(at.plus_as_string("test-commas-trailing-2")); - at.touch(&at.plus_as_string("test-commas-trailing-1")); + at.touch(at.plus_as_string("test-commas-trailing-1")); at.append( "test-commas-trailing-1", &(0..2000) @@ -957,7 +957,7 @@ fn test_ls_commas_trailing() { fn test_ls_long() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-long")); + at.touch(at.plus_as_string("test-long")); for arg in LONG_ARGS { let result = scene.ucmd().arg(arg).arg("test-long").succeeds(); @@ -975,7 +975,7 @@ fn test_ls_long_format() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; at.mkdir(&at.plus_as_string("test-long-dir")); - at.touch(&at.plus_as_string("test-long-dir/test-long-file")); + at.touch(at.plus_as_string("test-long-dir/test-long-file")); at.mkdir(&at.plus_as_string("test-long-dir/test-long-dir")); for arg in LONG_ARGS { @@ -1231,9 +1231,9 @@ fn test_ls_long_symlink_color() { fn test_ls_long_total_size() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-long")); + at.touch(at.plus_as_string("test-long")); at.append("test-long", "1"); - at.touch(&at.plus_as_string("test-long2")); + at.touch(at.plus_as_string("test-long2")); at.append("test-long2", "2"); let expected_prints: HashMap<_, _> = if cfg!(unix) { @@ -1275,7 +1275,7 @@ fn test_ls_long_total_size() { fn test_ls_long_formats() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-long-formats")); + at.touch(at.plus_as_string("test-long-formats")); // Zero or one "." for indicating a file with security context @@ -1422,8 +1422,8 @@ fn test_ls_long_formats() { fn test_ls_oneline() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; - at.touch(&at.plus_as_string("test-oneline-1")); - at.touch(&at.plus_as_string("test-oneline-2")); + at.touch(at.plus_as_string("test-oneline-1")); + at.touch(at.plus_as_string("test-oneline-2")); // Bit of a weird situation: in the tests oneline and columns have the same output, // except on Windows. @@ -1443,7 +1443,7 @@ fn test_ls_deref() { let path_regexp = r"(.*)test-long.link -> (.*)test-long(.*)"; let re = Regex::new(path_regexp).unwrap(); - at.touch(&at.plus_as_string("test-long")); + at.touch(at.plus_as_string("test-long")); at.symlink_file("test-long", "test-long.link"); assert!(at.is_symlink("test-long.link")); @@ -1808,8 +1808,8 @@ fn test_ls_files_dirs() { at.mkdir("a/b"); at.mkdir("a/b/c"); at.mkdir("z"); - at.touch(&at.plus_as_string("a/a")); - at.touch(&at.plus_as_string("a/b/b")); + at.touch(at.plus_as_string("a/a")); + at.touch(at.plus_as_string("a/b/b")); scene.ucmd().arg("a").succeeds(); scene.ucmd().arg("a/a").succeeds(); @@ -1840,8 +1840,8 @@ fn test_ls_recursive() { at.mkdir("a/b"); at.mkdir("a/b/c"); at.mkdir("z"); - at.touch(&at.plus_as_string("a/a")); - at.touch(&at.plus_as_string("a/b/b")); + at.touch(at.plus_as_string("a/a")); + at.touch(at.plus_as_string("a/b/b")); scene.ucmd().arg("a").succeeds(); scene.ucmd().arg("a/a").succeeds(); @@ -1880,7 +1880,7 @@ fn test_ls_color() { .join("nested_file") .to_string_lossy() .to_string(); - at.touch(&nested_file); + at.touch(nested_file); at.touch("test-color"); let a_with_colors = "\x1b[1;34ma\x1b[0m"; @@ -1985,7 +1985,7 @@ fn test_ls_indicator_style() { at.mkdir("directory"); assert!(at.dir_exists("directory")); - at.touch(&at.plus_as_string("link-src")); + at.touch(at.plus_as_string("link-src")); at.symlink_file("link-src", "link-dest.link"); assert!(at.is_symlink("link-dest.link")); @@ -2077,7 +2077,7 @@ fn test_ls_indicator_style() { at.mkdir("directory"); assert!(at.dir_exists("directory")); - at.touch(&at.plus_as_string("link-src")); + at.touch(at.plus_as_string("link-src")); at.symlink_file("link-src", "link-dest.link"); assert!(at.is_symlink("link-dest.link")); diff --git a/tests/by-util/test_mv.rs b/tests/by-util/test_mv.rs index 93693279b..c673e5643 100644 --- a/tests/by-util/test_mv.rs +++ b/tests/by-util/test_mv.rs @@ -55,7 +55,7 @@ fn test_mv_move_file_into_dir() { ucmd.arg(file).arg(dir).succeeds().no_stderr(); - assert!(at.file_exists(&format!("{dir}/{file}"))); + assert!(at.file_exists(format!("{dir}/{file}"))); } #[test] @@ -67,17 +67,17 @@ fn test_mv_move_file_between_dirs() { at.mkdir(dir1); at.mkdir(dir2); - at.touch(&format!("{dir1}/{file}")); + at.touch(format!("{dir1}/{file}")); - assert!(at.file_exists(&format!("{dir1}/{file}"))); + assert!(at.file_exists(format!("{dir1}/{file}"))); ucmd.arg(&format!("{dir1}/{file}")) .arg(dir2) .succeeds() .no_stderr(); - assert!(!at.file_exists(&format!("{dir1}/{file}"))); - assert!(at.file_exists(&format!("{dir2}/{file}"))); + assert!(!at.file_exists(format!("{dir1}/{file}"))); + assert!(at.file_exists(format!("{dir2}/{file}"))); } #[test] @@ -94,7 +94,7 @@ fn test_mv_strip_slashes() { scene.ucmd().arg(&source).arg(dir).fails(); - assert!(!at.file_exists(&format!("{dir}/{file}"))); + assert!(!at.file_exists(format!("{dir}/{file}"))); scene .ucmd() @@ -104,7 +104,7 @@ fn test_mv_strip_slashes() { .succeeds() .no_stderr(); - assert!(at.file_exists(&format!("{dir}/{file}"))); + assert!(at.file_exists(format!("{dir}/{file}"))); } #[test] @@ -124,8 +124,8 @@ fn test_mv_multiple_files() { .succeeds() .no_stderr(); - assert!(at.file_exists(&format!("{target_dir}/{file_a}"))); - assert!(at.file_exists(&format!("{target_dir}/{file_b}"))); + assert!(at.file_exists(format!("{target_dir}/{file_a}"))); + assert!(at.file_exists(format!("{target_dir}/{file_b}"))); } #[test] @@ -305,7 +305,7 @@ fn test_mv_simple_backup() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -324,7 +324,7 @@ fn test_mv_simple_backup_with_file_extension() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -339,7 +339,7 @@ fn test_mv_arg_backup_arg_first() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -360,7 +360,7 @@ fn test_mv_custom_backup_suffix() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}{suffix}"))); + assert!(at.file_exists(format!("{file_b}{suffix}"))); } #[test] @@ -381,7 +381,7 @@ fn test_mv_custom_backup_suffix_hyphen_value() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}{suffix}"))); + assert!(at.file_exists(format!("{file_b}{suffix}"))); } #[test] @@ -401,7 +401,7 @@ fn test_mv_custom_backup_suffix_via_env() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}{suffix}"))); + assert!(at.file_exists(format!("{file_b}{suffix}"))); } #[test] @@ -420,7 +420,7 @@ fn test_mv_backup_numbered_with_t() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}.~1~"))); + assert!(at.file_exists(format!("{file_b}.~1~"))); } #[test] @@ -439,7 +439,7 @@ fn test_mv_backup_numbered() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}.~1~"))); + assert!(at.file_exists(format!("{file_b}.~1~"))); } #[test] @@ -458,7 +458,7 @@ fn test_mv_backup_existing() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -477,7 +477,7 @@ fn test_mv_backup_nil() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -498,7 +498,7 @@ fn test_mv_numbered_if_existing_backup_existing() { assert!(at.file_exists(file_b)); assert!(at.file_exists(file_b_backup)); - assert!(at.file_exists(&format!("{file_b}.~2~"))); + assert!(at.file_exists(format!("{file_b}.~2~"))); } #[test] @@ -519,7 +519,7 @@ fn test_mv_numbered_if_existing_backup_nil() { assert!(at.file_exists(file_b)); assert!(at.file_exists(file_b_backup)); - assert!(at.file_exists(&format!("{file_b}.~2~"))); + assert!(at.file_exists(format!("{file_b}.~2~"))); } #[test] @@ -538,7 +538,7 @@ fn test_mv_backup_simple() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -557,7 +557,7 @@ fn test_mv_backup_never() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(at.file_exists(&format!("{file_b}~"))); + assert!(at.file_exists(format!("{file_b}~"))); } #[test] @@ -576,7 +576,7 @@ fn test_mv_backup_none() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(!at.file_exists(&format!("{file_b}~"))); + assert!(!at.file_exists(format!("{file_b}~"))); } #[test] @@ -595,7 +595,7 @@ fn test_mv_backup_off() { assert!(!at.file_exists(file_a)); assert!(at.file_exists(file_b)); - assert!(!at.file_exists(&format!("{file_b}~"))); + assert!(!at.file_exists(format!("{file_b}~"))); } #[test] @@ -660,8 +660,8 @@ fn test_mv_target_dir() { assert!(!at.file_exists(file_a)); assert!(!at.file_exists(file_b)); - assert!(at.file_exists(&format!("{dir}/{file_a}"))); - assert!(at.file_exists(&format!("{dir}/{file_b}"))); + assert!(at.file_exists(format!("{dir}/{file_a}"))); + assert!(at.file_exists(format!("{dir}/{file_b}"))); } #[test] @@ -675,7 +675,7 @@ fn test_mv_target_dir_single_source() { ucmd.arg("-t").arg(dir).arg(file).succeeds().no_stderr(); assert!(!at.file_exists(file)); - assert!(at.file_exists(&format!("{dir}/{file}"))); + assert!(at.file_exists(format!("{dir}/{file}"))); } #[test] diff --git a/tests/by-util/test_realpath.rs b/tests/by-util/test_realpath.rs index 2993d8dbb..691ad29a2 100644 --- a/tests/by-util/test_realpath.rs +++ b/tests/by-util/test_realpath.rs @@ -192,7 +192,7 @@ fn test_realpath_existing() { ucmd.arg("-e") .arg(".") .succeeds() - .stdout_only(at.plus_as_string(&format!("{}\n", at.root_dir_resolved()))); + .stdout_only(at.plus_as_string(format!("{}\n", at.root_dir_resolved()))); } #[test] diff --git a/tests/common/util.rs b/tests/common/util.rs index ed4ecf8e9..b9600e5b6 100644 --- a/tests/common/util.rs +++ b/tests/common/util.rs @@ -746,14 +746,14 @@ impl AtPath { self.subdir.to_str().unwrap().to_owned() } - pub fn plus(&self, name: &str) -> PathBuf { + pub fn plus>(&self, name: P) -> PathBuf { let mut pathbuf = self.subdir.clone(); pathbuf.push(name); pathbuf } - pub fn plus_as_string(&self, name: &str) -> String { - String::from(self.plus(name).to_str().unwrap()) + pub fn plus_as_string>(&self, name: P) -> String { + self.plus(name).display().to_string() } fn minus(&self, name: &str) -> PathBuf { @@ -876,7 +876,8 @@ impl AtPath { fs::remove_dir(self.plus(dir)).unwrap(); } - pub fn mkdir(&self, dir: &str) { + pub fn mkdir>(&self, dir: P) { + let dir = dir.as_ref(); log_info("mkdir", self.plus_as_string(dir)); fs::create_dir(self.plus(dir)).unwrap(); } @@ -893,7 +894,8 @@ impl AtPath { } } - pub fn touch(&self, file: &str) { + pub fn touch>(&self, file: P) { + let file = file.as_ref(); log_info("touch", self.plus_as_string(file)); File::create(self.plus(file)).unwrap(); } @@ -1016,7 +1018,7 @@ impl AtPath { } } - pub fn file_exists(&self, path: &str) -> bool { + pub fn file_exists>(&self, path: P) -> bool { match fs::metadata(self.plus(path)) { Ok(m) => m.is_file(), Err(_) => false,