rumdl 0.3.0

A fast Markdown linter and formatter written in Rust
Documentation
use std::fs;
use std::process::{Command, Output};

const ISSUE_INPUT: &str =
    "# Doc\n\nIntro.\n\n---\n\nFirst line of a paragraph.\nSecond line of the paragraph.\n___\nNext paragraph.\n";

fn run(dir: &std::path::Path, args: &[&str]) -> Output {
    Command::new(env!("CARGO_BIN_EXE_rumdl"))
        .current_dir(dir)
        .args(["check", "--no-cache", "--config", "empty.toml", "--fix"])
        .args(args)
        .arg("doc.md")
        .output()
        .unwrap()
}

fn setup() -> tempfile::TempDir {
    let dir = tempfile::tempdir().unwrap();
    fs::write(dir.path().join("empty.toml"), "").unwrap();
    fs::write(dir.path().join("doc.md"), ISSUE_INPUT).unwrap();
    dir
}

#[test]
fn md035_fix_keeps_paragraph_and_converges_to_a_thematic_break() {
    let dir = setup();
    let output = run(dir.path(), &[]);
    assert!(output.status.success(), "{output:?}");
    assert_eq!(
        fs::read_to_string(dir.path().join("doc.md")).unwrap(),
        "# Doc\n\nIntro.\n\n---\n\nFirst line of a paragraph.\nSecond line of the paragraph.\n\n---\n\nNext paragraph.\n"
    );
}

#[test]
fn md035_fix_without_md065_declines_and_the_warning_remains() {
    let dir = setup();
    let output = run(dir.path(), &["--enable", "MD035"]);
    assert_eq!(
        fs::read_to_string(dir.path().join("doc.md")).unwrap(),
        ISSUE_INPUT,
        "the document must not change"
    );
    assert!(
        !output.status.success(),
        "the unfixed warning must fail the run: {output:?}"
    );
    assert!(String::from_utf8_lossy(&output.stdout).contains("MD035"), "{output:?}");
}