katana-document-viewer 0.1.4

KatanA document viewer artifact, render evaluation, and export foundation.
Documentation
use crate::export_surface::test_modules::test_support::SurfaceTestSupport;

#[test]
fn sample_fixture_surface_does_not_leak_raw_markup_or_diagram_source()
-> Result<(), Box<dyn std::error::Error>> {
    let (fixture, markdown) = sample_fixture()?;
    let joined = SurfaceTestSupport::surface_text(&SurfaceTestSupport::graph_from_markdown(
        &fixture.display().to_string(),
        markdown,
    )?);

    SurfaceTestSupport::assert_not_contains_any(
        &joined,
        &[
            "```",
            "[!NOTE]",
            "| 機能 |",
            "|---",
            "> 内側の引用",
            "<img",
            "data:image/svg+xml",
            "http://www.w3.org/2000/svg",
            "@startuml",
            "@enduml",
        ],
    );
    Ok(())
}

#[test]
fn sample_fixture_surface_renders_readme_header_data_svg_as_image()
-> Result<(), Box<dyn std::error::Error>> {
    let (fixture, markdown) = sample_fixture()?;
    let debug = SurfaceTestSupport::surface_debug(&SurfaceTestSupport::graph_from_markdown(
        &fixture.display().to_string(),
        markdown,
    )?);

    SurfaceTestSupport::assert_contains_all(&debug, &["image:128x128:アイコン"]);
    SurfaceTestSupport::assert_not_contains_any(
        &debug,
        &["data:image/svg+xml", "<img", "http://www.w3.org/2000/svg"],
    );
    Ok(())
}

#[test]
fn sample_fixture_surface_accepts_crlf_markdown_input() -> Result<(), Box<dyn std::error::Error>> {
    let (fixture, markdown) = sample_fixture()?;
    let markdown = markdown
        .replace("\r\n", "\n")
        .replace('\r', "\n")
        .replace('\n', "\r\n");
    let joined = SurfaceTestSupport::surface_text(&SurfaceTestSupport::graph_from_markdown(
        &fixture.display().to_string(),
        markdown,
    )?);

    SurfaceTestSupport::assert_not_contains_any(&joined, &["| 機能 |", "[!NOTE]"]);
    Ok(())
}

fn sample_fixture() -> Result<(std::path::PathBuf, String), Box<dyn std::error::Error>> {
    let fixture =
        std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("fixtures/rendering/sample.ja.md");
    let markdown = std::fs::read_to_string(&fixture)?;
    Ok((fixture, markdown))
}