normalizefs 0.0.11

Normalization of file system paths
Documentation
use std::path::Path;
use super::normalize_posix;


//   posix style normalizer tests

fn normalize(path: impl AsRef<Path>) -> String {
   normalize_posix(path).to_str().unwrap().to_owned()
}

/*
posix normalizer calls these functions sequentialy:
   1. remove_double_separators
   2. remove_start_dot_slash
   3. remove_slash_dot_slash
   4. remove_end_dot
   5. resolve_end_updir
   6. resolve_updirs
*/

/* test case for 1 */
#[test]
fn double_separators_test() {
   let p = "//here//we//go";
   assert_eq!(normalize(p), "/here/we/go");
}

/* test case for 2 */
#[test]
fn start_dot_slash_test() {
   let p = "./here/we/go";
   assert_eq!(normalize(p), "here/we/go");
}

/* test case for 2 */
#[test]
fn double_start_dot_slash_test() {
   let p = "././here/we/go";
   assert_eq!(normalize(p), "here/we/go");
}

/* test case for 3 */
#[test]
fn remove_slash_dot_slash_test() {
   let p = "here/./we/./go";
   assert_eq!(normalize(p), "here/we/go");
}

/* test case for 4 */
#[test]
fn remove_end_dot_test() {
   let p = "here/we/go/.";
   assert_eq!(normalize(p), "here/we/go/");
}

/* test case for 5 + 6 */
#[test]
fn resolve_end_updir_test() {
   let p1 = "here/we/go/..";
   assert_eq!(normalize(p1), "here/we/");
   let p2 = "here/we/go/../";
   assert_eq!(normalize(p2), "here/we/");
   let p3 = "here/we/go/../.";
   assert_eq!(normalize(p3), "here/we/");
}

/** test case for 1 and 6 */
#[test]
fn do_not_travel_outside_root_double_separators_test() {
   let p = "//here//..//..//..//man";
   assert_eq!(normalize(p), "/man");
}

/** test case for 6 */
#[test]
fn travel_outside_root_relative_test() {
   let p = "here/../../man";
   assert_eq!(normalize(p), "../man");
}

/** test case for 6 */
#[test]
fn travel_one_dir_up_test() {
   let p = "here/../man";
   assert_eq!(normalize(p), "man");
}

/** test case for 6 */
#[test]
fn do_not_travel_outside_root_test() {
   let p = "/here/../../../man";
   assert_eq!(normalize(p), "/man");
}