use std::path::{Component, Path, PathBuf};
fn strip_root_prefix(path: &Path) -> PathBuf {
let mut result = PathBuf::new();
for comp in path.components() {
match comp {
Component::Prefix(_) | Component::RootDir => continue,
_ => result.push(comp),
}
}
if result.as_os_str().is_empty() {
PathBuf::from(".")
} else {
result
}
}
#[test]
fn test_strip_disk_prefix() {
let path = Path::new(r"C:\Windows\System32");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"Windows\System32"));
}
#[test]
fn test_strip_unc_path() {
let path = Path::new(r"\\server\share\path\file.txt");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"path\file.txt"));
}
#[test]
fn test_strip_extended_length_path() {
let path = Path::new(r"\\?\C:\Windows\System32");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"Windows\System32"));
}
#[test]
fn test_strip_extended_unc_path() {
let path = Path::new(r"\\?\UNC\server\share\path\file.txt");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"path\file.txt"));
}
#[test]
fn test_strip_root_only_returns_dot() {
let path = Path::new(r"C:\");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new("."));
}
#[test]
fn test_relative_path_unchanged() {
let path = Path::new(r"relative\path\file.txt");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"relative\path\file.txt"));
}
#[test]
fn test_drive_relative_path() {
let path = Path::new(r"C:file.txt");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"file.txt"));
}
#[test]
fn test_verbatim_path() {
let path = Path::new(r"\\?\C:\Windows\System32\file.dll");
let stripped = strip_root_prefix(path);
assert_eq!(stripped, Path::new(r"Windows\System32\file.dll"));
}