textlane-core 0.6.1

Textlane's core: unist, mdast, hast and nlcst trees, the file and the plugin contract its crates share
Documentation
use super::{prefix_base, resolve_url};

#[test]
fn resolves_relative_and_root_relative_urls() {
    let resolved = resolve_url(
        "../img/a.png?v=1#x",
        Some("docs/guides/a.html"),
        Some("docs"),
    );
    assert_eq!(
        resolved.map(|url| (url.file, url.suffix)),
        Some(("img/a.png".into(), "?v=1#x"))
    );
    assert_eq!(
        resolve_url("/a/", None, None).map(|url| url.directory),
        Some(true)
    );
}

#[test]
fn leaves_urls_a_browser_reads_otherwise_alone() {
    for url in [
        "https://x.dev",
        "//x.dev",
        "#top",
        "\\\\evil.dev",
        "/\\evil.dev",
        "a\\b",
        "/\t/evil.dev",
        "/\n/evil.dev",
        " //evil.dev",
        "/a\u{0}",
    ] {
        assert_eq!(resolve_url(url, Some("index.html"), None), None, "{url}");
    }
}

#[test]
fn prefixes_base_once() {
    assert_eq!(prefix_base("/a", Some("/repo/")), "/repo/a");
    assert_eq!(prefix_base("/repo/a", Some("/repo")), "/repo/a");
}