#[cfg(test)]
mod test_string_resolver {
use s_macro::s;
use crate::plugins::dfs::handler::aux_resolve_path;
#[test]
fn test_ok_not_absolute() {
let root = std::path::PathBuf::from("/");
let path = s!("a/b/c");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_rel_ok_dot() {
let root = std::path::PathBuf::from("/");
let path = s!("./a/b/c");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_ok_starts_with_dotdot() {
let root = std::path::PathBuf::from("/");
let path = s!("../a/b/c");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_abs_ok_dot() {
let root = std::path::PathBuf::from("/");
let path = s!("/./a/b/c");
let res = aux_resolve_path(&path, root).unwrap();
assert!(res == "/a/b/c", "res: {res:?}");
}
#[test]
fn test_abs_ok_dotdot() {
let root = std::path::PathBuf::from("/");
let path = s!("/../a/b/c");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_abs_weird_above_root() {
let root = std::path::PathBuf::from("/");
let path = s!("/../../..//..///.../.../../a/b.c/");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_root_ok_mult_redirect() {
let root = std::path::PathBuf::from("/");
let path = s!("/a/../a/../a/../a/../a/../a/../a");
let res = aux_resolve_path(&path, root).unwrap();
assert!(res == "/a", "res: {res:?}");
}
#[test]
fn test_root_ok_up_before_root() {
let root = std::path::PathBuf::from("/");
let path = s!("/../a/b/c");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_plain_doubledot() {
let root = std::path::PathBuf::from("/");
let path = s!("..");
let res = aux_resolve_path(&path, root);
assert!(res.is_ok(), "res: {res:?}");
assert!(!res.unwrap().is_empty());
}
#[test]
fn test_root_ok_dotdotnames() {
let root = std::path::PathBuf::from("/");
let path = s!("/a/..c");
let res = aux_resolve_path(&path, root).unwrap();
assert!(res == "/a/..c", "res: {res:?}");
}
#[test]
fn test_root_ok_dotnames() {
let root = std::path::PathBuf::from("/");
let path = s!("/a/../.c");
let res = aux_resolve_path(&path, root).unwrap();
assert!(res == "/.c", "res: {res:?}");
}
}
#[cfg(test)]
mod test_tilda {
use s_macro::s;
use crate::plugins::dfs::handler::aux_resolve_local;
#[test]
fn test_ok_tilda() {
let root = std::path::PathBuf::from("/");
let path = s!("~/a/b/c");
let res = aux_resolve_local(&path, root);
assert!(res.is_ok(), "res: {res:?}");
}
#[test]
fn test_nook_tilda() {
let root = std::path::PathBuf::from("/");
let path = s!("/~/a/b/c");
let res = aux_resolve_local(&path, root);
assert!(res.is_err(), "res: {res:?}");
}
#[test]
fn test_ok_multiple_tildas() {
let root = std::path::PathBuf::from("/");
let path = s!("~/a/b/c/~/d/e/f");
let res = aux_resolve_local(&path, root);
assert!(res.is_err(), "res: {res:?}");
}
}