normalizefs 0.0.11

Normalization of file system paths
Documentation
use std::path::Path;
use super::pathconv::path_to_vector as to_vector;
use super::pathconv::vector_to_pathbuf as to_pathbuf;
use super::normalize_unc;


//   UNC normalizer tests

fn normalize(path: impl AsRef<Path>) -> String {
   let mut vec = to_vector(path);
   normalize_unc(&mut vec);
   to_pathbuf(vec).to_str().unwrap().to_owned()
}

/*
   Windows UNC normalizer converts both server and share name to lowercase
   while rest of path is left untouched.

   Cases:
     0. Not UNC Path
     1. Normalize server name only
     2. Server name + \
     3. Server name and Share name
     4. Server name, Share name + \
     5. Server name, Share name, rest untouched
*/

/* test case zero */
#[test]
fn empty() {
   let p = "";
   assert_eq!(normalize(p), r"");
}

/* test case zero */
#[test]
fn not_unc() {
   let p = r"\Directory\File";
   assert_eq!(normalize(p), r"\Directory\File");
}

/* test case for 1 */
#[test]
fn normalize_server_name() {
   let p = r"\\SERVER";
   assert_eq!(normalize(p), r"\\server");
}

/* test case for 2 */
#[test]
fn normalize_server_name_slash() {
   let p = r"\\SERVER\";
   assert_eq!(normalize(p), r"\\server\");
}

/* test case for 3 */
#[test]
fn normalize_server_and_share_test() {
   let p = r"\\SERVER\SHARE";
   assert_eq!(normalize(p), r"\\server\share");
}

/* test case for 4 */
#[test]
fn normalize_server_share_slash_test() {
   let p = r"\\SERVER\SHARE\";
   assert_eq!(normalize(p), r"\\server\share\");
}

/* test case for 5 */
#[test]
fn normalize_server_share_rest_test() {
   let p = r"\\SERVER\SHARE\Directory";
   assert_eq!(normalize(p), r"\\server\share\Directory");
}