use std::path::Path; use super::{Pictures, body, document, plain}; mod visual; fn page(text: &str, beside: Option<&Path>, pictures: &Pictures) -> super::Page { body(text, beside, pictures).expect("a page") } /// A 1×1 PNG, as base64. const DOT: &str = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4z8AAAAMBAQAY3Y2wAAAAAElFTkSuQmCC"; #[test] fn formulas_and_diagrams_draw_as_svg() { let text = "Inline $x^2$ here.\n\n$$\n\\sqrt{y}\n$$\n\n```mermaid\nflowchart LR\n A --> B\n```\n"; let page = page(text, None, &Pictures::Inline); assert_eq!(page.html.matches(" = page.formulas.iter().map(|(line, _)| *line).collect(); assert_eq!(lines, [1, 5, 9]); assert!(page.formulas.iter().all(|(_, why)| !why.is_empty())); assert_eq!(page.diagrams, [11, 16]); assert!( page.html .contains("
\\frac{"),
        "{}",
        page.html
    );
    assert!(page.html.contains("\\sqrt{"), "{}", page.html);
    assert!(
        page.html
            .contains("
flowchart LR"),
        "{}",
        page.html
    );
}

#[test]
fn markdown_writes_as_html() {
    let text = "# T\n\n- [x] done\n- b\n\n3. c\n\n| l | r |\n|:--|--:|\n| 1 | 2 |\n\n~~gone~~ [a](https://x.org \"t\") [r][ref] [bad](javascript:alert(1))\n\nNote[^1].\n\n[^1]: The note.\n\n[ref]: /docs\n";
    let html = page(text, None, &Pictures::Inline).html;
    for part in [
        "

T

", "
  • done
  • ", "
      ", "l", "2", "gone", "a", "r", "bad", "1", "
      [1]

      The note.

      ", ] { assert!(html.contains(part), "{part} in {html}"); } } #[test] fn front_matter_and_raw_html_do_not_go_live() { let page = page( "---\ntitle: Secret\n---\n\n\n\nText.\n", None, &Pictures::Inline, ); assert!(!page.html.contains("Secret"), "{}", page.html); assert!(!page.html.contains("