legion_prof_viewer 0.8.0

Profiler UI frontend component for Legion Prof
Documentation
use url::Url;

pub fn ensure_directory(url: &Url) -> Url {
    let mut result = url.clone();

    if let Ok(mut segments) = result.path_segments_mut() {
        segments.pop_if_empty().push("");
    }

    result
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_path_trailing_slash() {
        let url1 = Url::parse("https://example.net/a/b/c/").unwrap();
        let url2 = Url::parse("https://example.net/a/b/c/").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_path_no_trailing_slash() {
        let url1 = Url::parse("https://example.net/a/b/c").unwrap();
        let url2 = Url::parse("https://example.net/a/b/c/").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_root_trailing_slash() {
        let url1 = Url::parse("https://example.net/").unwrap();
        let url2 = Url::parse("https://example.net/").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_root_no_trailing_slash() {
        let url1 = Url::parse("https://example.net").unwrap();
        let url2 = Url::parse("https://example.net/").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_query_trailing_slash() {
        let url1 = Url::parse("https://example.net/a/b/c/?query=asdf").unwrap();
        let url2 = Url::parse("https://example.net/a/b/c/?query=asdf").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_query_no_trailing_slash() {
        let url1 = Url::parse("https://example.net/a/b/c?query=asdf").unwrap();
        let url2 = Url::parse("https://example.net/a/b/c/?query=asdf").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_fragment_trailing_slash() {
        let url1 = Url::parse("https://example.net/a/b/c/#fragment").unwrap();
        let url2 = Url::parse("https://example.net/a/b/c/#fragment").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_fragment_no_trailing_slash() {
        let url1 = Url::parse("https://example.net/a/b/c#fragment").unwrap();
        let url2 = Url::parse("https://example.net/a/b/c/#fragment").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }

    #[test]
    fn test_mailto() {
        let url1 = Url::parse("mailto:user@example.com").unwrap();
        let url2 = Url::parse("mailto:user@example.com").unwrap();
        assert_eq!(ensure_directory(&url1), url2);
    }
}