katana-document-viewer 0.1.4

KatanA document viewer artifact, render evaluation, and export foundation.
Documentation
use super::contract_test_support::HtmlContractTestSupport;

#[test]
fn red_detects_table_alignment_css_contract_gaps() -> Result<(), Box<dyn std::error::Error>> {
    let html = HtmlContractTestSupport::export_html(
        "| 左寄せ | 中央寄せ | 右寄せ |\n| :--- | :---: | ---: |\n| テキスト | テキスト | テキスト |\n| 長いテキスト | 短い | 12345 |\n",
    )?;
    assert_table_alignment_style_contract(&html);
    assert_table_alignment_cell_contract(&html);
    Ok(())
}

fn assert_table_alignment_style_contract(html: &str) {
    HtmlContractTestSupport::assert_contains_all(
        html,
        &[
            (
                "left align css",
                r#"th[data-align="left"],td[data-align="left"]{text-align:left;}"#,
            ),
            (
                "center align css",
                r#"th[data-align="center"],td[data-align="center"]{text-align:center;}"#,
            ),
            (
                "right align css",
                r#"th[data-align="right"],td[data-align="right"]{text-align:right;}"#,
            ),
        ],
    );
}

fn assert_table_alignment_cell_contract(html: &str) {
    HtmlContractTestSupport::assert_contains_all(
        html,
        &[
            (
                "left body cell",
                r#"<td data-align="left" data-kdv-column-size="short">長いテキスト</td>"#,
            ),
            (
                "center body cell",
                r#"<td data-align="center" data-kdv-column-size="short">短い</td>"#,
            ),
            (
                "right body cell",
                r#"<td data-align="right" data-kdv-column-size="short">12345</td>"#,
            ),
        ],
    );
}

#[test]
fn red_detects_table_cell_markdown_and_short_column_width_gaps()
-> Result<(), Box<dyn std::error::Error>> {
    let html = HtmlContractTestSupport::export_html(
        "| コンポーネント | 役割 |\n| --- | --- |\n| `PreviewPane` | セクション管理 |\n| `show_content` | UI描画 |\n",
    )?;

    HtmlContractTestSupport::assert_contains_all(
        &html,
        &[
            ("inline code in first row", "<code>PreviewPane</code>"),
            ("inline code in second row", "<code>show_content</code>"),
            (
                "short column width fits cjk",
                r#"col[data-kdv-column-size="short"]{width:12em;}"#,
            ),
            (
                "short cell width fits cjk",
                r#"th[data-kdv-column-size="short"],td[data-kdv-column-size="short"]{width:12em;max-width:12em;"#,
            ),
        ],
    );
    assert!(
        !html.contains("`PreviewPane`") && !html.contains("`show_content`"),
        "table cells must render inline Markdown instead of raw backticks: {html}"
    );
    Ok(())
}