use std::fs;
use std::process::Command;
use tempfile::tempdir;
fn rumdl_bin() -> &'static str {
env!("CARGO_BIN_EXE_rumdl")
}
#[test]
fn test_rules_wrapper_md033_allowed_elements_respected() {
let temp_dir = tempdir().unwrap();
let base = temp_dir.path();
fs::write(
base.join(".rumdl.toml"),
r#"[rules]
[rules.MD033]
enabled = true
allowed-elements = ["div", "img"]
"#,
)
.unwrap();
fs::write(base.join("README.md"), "<div><img src=\"x.png\"></div>\n").unwrap();
let output = Command::new(rumdl_bin())
.current_dir(base)
.args(["check", "--no-cache", "README.md"])
.output()
.expect("Failed to execute rumdl");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
!stdout.contains("MD033"),
"MD033 must not fire for allowed elements div/img, got stdout:\n{stdout}\nstderr:\n{stderr}"
);
}
#[test]
fn test_rules_wrapper_flat_form_resolves() {
let temp_dir = tempdir().unwrap();
let base = temp_dir.path();
fs::write(
base.join(".rumdl.toml"),
r#"[rules.MD013]
line-length = 200
"#,
)
.unwrap();
let long_line = "a".repeat(150);
fs::write(base.join("test.md"), format!("# Title\n\n{long_line}\n")).unwrap();
let output = Command::new(rumdl_bin())
.current_dir(base)
.args(["check", "--no-cache", "--enable", "MD013", "test.md"])
.output()
.expect("Failed to execute rumdl");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
!stdout.contains("MD013"),
"MD013 must not fire for a 150-char line when line-length = 200 is set via [rules.MD013], got stdout:\n{stdout}\nstderr:\n{stderr}"
);
}
#[test]
fn test_rules_wrapper_pyproject_md033_allowed_elements() {
let temp_dir = tempdir().unwrap();
let base = temp_dir.path();
fs::write(
base.join("pyproject.toml"),
r#"[tool.rumdl.rules.MD033]
allowed-elements = ["div"]
"#,
)
.unwrap();
fs::write(base.join("test.md"), "<div>hello</div>\n").unwrap();
let output = Command::new(rumdl_bin())
.current_dir(base)
.args(["check", "--no-cache", "test.md"])
.output()
.expect("Failed to execute rumdl");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
!stdout.contains("MD033"),
"MD033 must not fire for allowed element 'div' configured via [tool.rumdl.rules.MD033], got stdout:\n{stdout}\nstderr:\n{stderr}"
);
}