Add tests for non-utf8

This commit is contained in:
Thayne McCombs 2023-02-13 02:00:03 -07:00
parent 3acd75bcc4
commit 17f9507e17
9 changed files with 170 additions and 126 deletions

View file

@ -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()

View file

@ -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()

View file

@ -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));
}

View file

@ -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]

View file

@ -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();

View file

@ -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"));

View file

@ -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]

View file

@ -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]

View file

@ -746,14 +746,14 @@ impl AtPath {
self.subdir.to_str().unwrap().to_owned()
}
pub fn plus(&self, name: &str) -> PathBuf {
pub fn plus<P: AsRef<Path>>(&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<P: AsRef<Path>>(&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<P: AsRef<Path>>(&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<P: AsRef<Path>>(&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<P: AsRef<Path>>(&self, path: P) -> bool {
match fs::metadata(self.plus(path)) {
Ok(m) => m.is_file(),
Err(_) => false,