From 96b979077c6f46b86d4a23bc599e29bf948e9cca Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Tue, 21 May 2024 12:07:03 -0500 Subject: [PATCH] Add unit tests for path_normalize_for_cd() --- src/wutil/mod.rs | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/wutil/mod.rs b/src/wutil/mod.rs index ee64298bb..64cc986e0 100644 --- a/src/wutil/mod.rs +++ b/src/wutil/mod.rs @@ -322,6 +322,90 @@ pub fn path_normalize_for_cd(wd: &wstr, path: &wstr) -> WString { result } +#[cfg(test)] +mod path_cd_tests { + use super::path_normalize_for_cd; + use crate::wchar::L; + + #[test] + fn relative_path() { + let wd = L!("/home/user/"); + let path = L!("projects"); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/home/user/projects")); + } + + #[test] + fn absolute_path() { + let wd = L!("/home/user/"); + let path = L!("/etc"); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/etc")); + } + + #[test] + fn parent_directory() { + let wd = L!("/home/user/projects/"); + let path = L!("../docs"); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/home/user/docs")); + } + + #[test] + fn current_directory() { + let wd = L!("/home/user/"); + let path = L!("./"); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/home/user")); + } + + #[test] + fn nested_parent_directory() { + let wd = L!("/home/user/projects/"); + let path = L!("../../"); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/home")); + } + + #[test] + fn complex_path() { + let wd = L!("/home/user/projects/"); + let path = L!("./../other/projects/./.././../docs"); + eprintln!("({}, {})", wd, path); + assert_eq!( + path_normalize_for_cd(wd, path), + L!("/home/user/other/projects/./.././../docs") + ); + } + + #[test] + fn root_directory() { + let wd = L!("/"); + let path = L!(".."); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/..")); + } + + #[test] + fn empty_path() { + let wd = L!("/home/user/"); + let path = L!(""); + eprintln!("({}, {})", wd, path); + assert_eq!(path_normalize_for_cd(wd, path), L!("/home/user/")); + } + + #[test] + fn trailing_slash() { + let wd = L!("/home/user/projects/"); + let path = L!("docs/"); + eprintln!("({}, {})", wd, path); + assert_eq!( + path_normalize_for_cd(wd, path), + L!("/home/user/projects/docs/") + ); + } +} + /// Wide character version of dirname(). pub fn wdirname(mut path: &wstr) -> &wstr { // Do not use system-provided dirname (#7837).