From ba2c1345e4119c26d5b7764b1238e56a1202e369 Mon Sep 17 00:00:00 2001 From: mataha Date: Tue, 6 Jun 2023 01:00:25 +0200 Subject: [PATCH] Add tests for path prefix normalization --- src/util.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/util.rs b/src/util.rs index 18d1c75..f0c8cdb 100644 --- a/src/util.rs +++ b/src/util.rs @@ -415,3 +415,39 @@ pub fn to_lowercase(s: impl AsRef) -> String { let s = s.as_ref(); if s.is_ascii() { s.to_ascii_lowercase() } else { s.to_lowercase() } } + +#[cfg(test)] +#[cfg(windows)] +mod tests_win { + use std::path::PathBuf; + + use rstest::rstest; + + #[rstest] + #[case(r"c:\", r"C:\")] + #[case(r"C:\", r"C:\")] + #[case(r"c:\\.", r"C:\")] + #[case(r"c:\..", r"C:\")] + #[case(r"C:\.\.", r"C:\")] + #[case(r"\\?\C:\", r"C:\")] + #[case(r"\\?\c:\", r"C:\")] + #[case(r"\\?\C:\\\", r"C:\")] + #[case(r"\\?\c:\\.\", r"C:\")] + #[case(r"c:\Windows", r"C:\Windows")] + #[case(r"C:\WINDOWS", r"C:\WINDOWS")] + #[case(r"c:\\\Windows\.", r"C:\Windows")] + #[case(r"C:\$WinREAgent", r"C:\$WinREAgent")] + #[case(r"\\?\c:\\Windows\\.", r"C:\Windows")] + #[case(r"\\?\c:\..\.\windows", r"C:\windows")] + #[case(r"c:\Windows\System32\.", r"C:\Windows\System32")] + #[case(r"c:\WINDOWS\..\..\Windows", r"C:\Windows")] + #[case(r"c:\Windows\..\.\.\..\Temp\..\tmp", r"C:\tmp")] + #[case(r"c:\.\Windows\..\..\Program Files", r"C:\Program Files")] + #[case(r"\\?\C:\\$WinREAgent\\..\Program Files\.", r"C:\Program Files")] + fn resolve_path(#[case] absolute_path: &str, #[case] normalized_form: &str) { + let path = PathBuf::from(absolute_path); + let resolved_path = super::resolve_path(path).unwrap(); + assert_eq!(resolved_path.to_str().unwrap(), normalized_form); + } + +}