vertigo-cmark 0.1.4

Allows to render CommonMark inside Vertigo tree
Documentation
use vertigo::{
    dev::inspect::{DomDebugFragment, log_start},
    dom,
};

use crate::to_vertigo;

#[test]
fn nested() {
    log_start();
    let _el1 = to_vertigo(r#"<div>Vertigo <strong>Cmark</strong> hereafter</div>"#);
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <div>"Vertigo "<strong>"Cmark"</strong>" hereafter"</div>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn nested_with_cmark_wont_work() {
    log_start();
    let _el1 = to_vertigo(r#"<p>Vertigo **Cmark** hereafter</p>"#);
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p>"Vertigo **Cmark** hereafter"</p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn anchor_with_cmark_works() {
    log_start();
    let _el1 = to_vertigo(
        r#"
<a href="https://github.com/vertigo-web/vertigo-cmark">Vertigo **Cmark**</a>

<a href="mailto:him@example.com">Do not email him</a>

<a href="https://github.com/vertigo-web/vertigo" title="Vertigo">Vertigo Code</a>
"#,
    );
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p><a href="https://github.com/vertigo-web/vertigo-cmark">"Vertigo <strong>Cmark</strong>"</a></p>
            <p><a href="mailto:him@example.com">"Do not email him"</a></p>
            <p><a href="https://github.com/vertigo-web/vertigo" title="Vertigo">"Vertigo Code"</a></p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn img() {
    log_start();
    let _el1 = to_vertigo(r#"Paragraph <img src="https://example.com/img.jpg" />"#);
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p>"Paragraph " <img src="https://example.com/img.jpg" /></p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn a_img() {
    log_start();
    let _el1 = to_vertigo(
        r#"Link: <a href="https://example.com/"><img src="https://example.com/img.jpg" /> <- click</a>"#,
    );
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p>"Link: " <a href="https://example.com/"><img src="https://example.com/img.jpg" />" <- click"</a></p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn void_elements_without_slash() {
    log_start();
    let _el1 = to_vertigo(r#"Line<br>next <img src="https://example.com/img.jpg"> after"#);
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p>"Line"<br />"next "<img src="https://example.com/img.jpg" />" after"</p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn end_tag_without_start_is_ignored() {
    log_start();
    let _el1 = to_vertigo("First </span>paragraph\n\nSecond </div>paragraph");
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p>"First ""paragraph"</p>
            <p>"Second ""paragraph"</p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn unclosed_tag_closes_with_markdown_element() {
    log_start();
    let _el1 = to_vertigo("Some <span>unclosed *text*\n\nNext paragraph");
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p>"Some "<span>"unclosed "<em>"text"</em></span></p>
            <p>"Next paragraph"</p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn end_tag_does_not_close_markdown_element() {
    log_start();
    let _el1 = to_vertigo("<span>crossing *emphasis</span> end*");
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <p><span>"crossing "<em>"emphasis"" end"</em></span></p>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn unclosed_block_closes_with_document() {
    log_start();
    let _el1 = to_vertigo("<div title=\"box\">\n\nInside\n");
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <div title="box">"\n"<p>"Inside"</p></div>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}

#[test]
fn text_line_of_html_block() {
    log_start();
    let _el1 = to_vertigo("<div title=\"box\">\nText in block\n</div>");
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = dom! {
        <div>
            <div title="box">"\n""Text in block\n"</div>
        </div>
    };
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, el2_str);
}