Sebastian Thielmake fmte0438074 years agoHistory
80 lines · 2.5 KB · Rust
RawDownload
mod convert {    use bstr::ByteSlice;    use git_path::{to_unix_separators, to_windows_separators};     #[test]    fn assure_unix_separators() {        assert_eq!(to_unix_separators(b"no-backslash".as_bstr()).as_bstr(), "no-backslash");         assert_eq!(to_unix_separators(b"\\a\\b\\\\".as_bstr()).as_bstr(), "/a/b//");    }     #[test]    fn assure_windows_separators() {        assert_eq!(            to_windows_separators(b"no-backslash".as_bstr()).as_bstr(),            "no-backslash"        );         assert_eq!(to_windows_separators(b"/a/b//".as_bstr()).as_bstr(), "\\a\\b\\\\");    }     mod absolutize {        use std::{borrow::Cow, path::Path};         use git_path::absolutize;         fn p(input: &str) -> &Path {            Path::new(input)        }         #[test]        fn no_change_if_there_are_no_trailing_relative_components() {            for input in ["./a/b/c/d", "/absolute/path", "C:\\hello\\world"] {                let path = p(input);                assert_eq!(absolutize(path, None::<&Path>), path);            }        }         #[test]        fn special_cases_around_cwd() {            let cwd = std::env::current_dir().unwrap();            assert_eq!(                absolutize(p("a/.."), None::<&Path>),                p("."),                "empty paths are never returned as they are invalid"            );            assert_eq!(                absolutize(p("a/../.."), Some(&cwd)),                cwd.parent().unwrap(),                "it automatically extends the poppable items by using the current working dir"            );        }         #[test]        fn trailing_relative_components_are_resolved() {            for (input, expected) in [                ("./a/b/./c/../d/..", "./a/b"),                ("/a/b/c/.././../.", "/a"),                ("./a/..", "."),                ("a/..", "."),                ("./a/b/../../..", "."),                ("/a/b/../../..", "/"),                ("/a/./b/c/.././../.", "/a"),                ("/a/././c/.././../.", "/"),                ("/a/b/../c/../..", "/"),                ("C:/hello/../a", "C:/a"),                ("./a/../b/..", "./"),                ("/a/../b", "/b"),            ] {                let path = p(input);                assert_eq!(                    absolutize(path, None::<&Path>),                    Cow::Borrowed(p(expected)),                    "'{}' got an unexpected result",                    input                );            }        }    }}