clankerdiff-ratatui 0.2.1

Embeddable Ratatui diff review widget
Documentation
use clankerdiff_markdown::MarkdownDocument;
use clankerdiff_ratatui::{MarkdownRenderer, testing::MarkdownStreamFixture};
use clankerdiff_syntax::SyntaxHighlighter;

#[test]
fn reference_renders_reparse_without_touching_streaming_highlights() {
    let mut fixture = MarkdownStreamFixture::from_source("```rust\nlet value = 1;\n```\n");
    fixture.layout();
    let streaming_stats = fixture.highlighter.stats();

    let first = fixture.one_shot();
    let first_stats = fixture.reference_highlighter.stats();
    assert!(first_stats.misses > 0);
    assert!(first_stats.bytes > 0);

    let second = fixture.one_shot();
    assert!(first.rows().iter().eq(second.rows().iter()));
    assert_eq!(
        fixture.reference_highlighter.stats().misses,
        2 * first_stats.misses
    );
    assert_eq!(
        fixture.reference_highlighter.stats().bytes,
        2 * first_stats.bytes
    );

    let lines = fixture.one_shot_lines();
    assert_eq!(lines, first.materialize());
    assert_eq!(
        fixture.reference_highlighter.stats().misses,
        3 * first_stats.misses
    );
    assert_eq!(
        fixture.reference_highlighter.stats().bytes,
        3 * first_stats.bytes
    );
    assert_eq!(fixture.reference_highlighter.stats().hits, 0);
    assert_eq!(fixture.highlighter.stats(), streaming_stats);
}

#[test]
fn reused_reference_highlighter_matches_fresh_renders_after_appends() {
    let mut fixture = MarkdownStreamFixture::terminal();
    for chunk in ["Some prose.\n\n```rust\n", "let value = ", "42;\n", "```\n"] {
        fixture.stream.push(chunk);
        fixture.assert_output_equivalent();
        let expected = MarkdownRenderer::new().render_layout(
            &MarkdownDocument::parse(fixture.stream.source()),
            fixture.options,
            &fixture.theme,
            &mut SyntaxHighlighter::default(),
        );
        assert!(fixture.one_shot().rows().iter().eq(expected.rows().iter()));
        assert_eq!(fixture.one_shot_lines(), expected.materialize());
    }
}