diff --git a/crates/test-programs/wasi-tests/src/bin/path_rename_dir_trailing_slashes.rs b/crates/test-programs/wasi-tests/src/bin/path_rename_dir_trailing_slashes.rs new file mode 100644 index 0000000000..7c27d9cbb0 --- /dev/null +++ b/crates/test-programs/wasi-tests/src/bin/path_rename_dir_trailing_slashes.rs @@ -0,0 +1,39 @@ +use std::{env, process}; +use wasi_tests::open_scratch_directory; + +unsafe fn test_path_rename_trailing_slashes(dir_fd: wasi::Fd) { + // Test renaming a directory with a trailing slash in the name. + wasi::path_create_directory(dir_fd, "source").expect("creating a directory"); + wasi::path_rename(dir_fd, "source/", dir_fd, "target") + .expect("renaming a directory with a trailing slash in the source name"); + wasi::path_rename(dir_fd, "target", dir_fd, "source/") + .expect("renaming a directory with a trailing slash in the destination name"); + wasi::path_rename(dir_fd, "source/", dir_fd, "target/") + .expect("renaming a directory with a trailing slash in the source and destination names"); + wasi::path_rename(dir_fd, "target", dir_fd, "source") + .expect("renaming a directory with no trailing slashes at all should work"); + wasi::path_remove_directory(dir_fd, "source").expect("removing the directory"); +} + +fn main() { + let mut args = env::args(); + let prog = args.next().unwrap(); + let arg = if let Some(arg) = args.next() { + arg + } else { + eprintln!("usage: {} ", prog); + process::exit(1); + }; + + // Open scratch directory + let dir_fd = match open_scratch_directory(&arg) { + Ok(dir_fd) => dir_fd, + Err(err) => { + eprintln!("{}", err); + process::exit(1) + } + }; + + // Run the tests. + unsafe { test_path_rename_trailing_slashes(dir_fd) } +} diff --git a/crates/test-programs/wasi-tests/src/bin/path_rename_trailing_slashes.rs b/crates/test-programs/wasi-tests/src/bin/path_rename_file_trailing_slashes.rs similarity index 71% rename from crates/test-programs/wasi-tests/src/bin/path_rename_trailing_slashes.rs rename to crates/test-programs/wasi-tests/src/bin/path_rename_file_trailing_slashes.rs index 2ba1699bbb..9d22f4d0c0 100644 --- a/crates/test-programs/wasi-tests/src/bin/path_rename_trailing_slashes.rs +++ b/crates/test-programs/wasi-tests/src/bin/path_rename_file_trailing_slashes.rs @@ -5,6 +5,10 @@ unsafe fn test_path_rename_trailing_slashes(dir_fd: wasi::Fd) { // Test renaming a file with a trailing slash in the name. create_file(dir_fd, "source"); + wasi::path_rename(dir_fd, "source", dir_fd, "target") + .expect("no trailing slashes rename works"); + wasi::path_rename(dir_fd, "target", dir_fd, "source").expect("rename it back to source"); + assert_eq!( wasi::path_rename(dir_fd, "source/", dir_fd, "target") .expect_err("renaming a file with a trailing slash in the source name should fail") @@ -27,16 +31,6 @@ unsafe fn test_path_rename_trailing_slashes(dir_fd: wasi::Fd) { "errno should be ERRNO_NOTDIR" ); wasi::path_unlink_file(dir_fd, "source").expect("removing a file"); - - // Test renaming a directory with a trailing slash in the name. - wasi::path_create_directory(dir_fd, "source").expect("creating a directory"); - wasi::path_rename(dir_fd, "source/", dir_fd, "target") - .expect("renaming a directory with a trailing slash in the source name"); - wasi::path_rename(dir_fd, "target", dir_fd, "source/") - .expect("renaming a directory with a trailing slash in the destination name"); - wasi::path_rename(dir_fd, "source/", dir_fd, "target/") - .expect("renaming a directory with a trailing slash in the source and destination names"); - wasi::path_remove_directory(dir_fd, "target").expect("removing a directory"); } fn main() {