#[cfg(test)]
mod test_md054_code_span {
use rumdl_lib::config::{Config, MarkdownFlavor};
use rumdl_lib::rules;
#[test]
fn test_md054_code_span_indexing() {
let content = r#"# Test MD054 Code Span Handling
Regular link: [text](url)
Code span with link syntax: `[link](url)` should be ignored
Multiple code spans: `[one](url1)` and `[two](url2)` should be ignored
Mixed: [real](url) and `[fake](url)` - only first should be flagged
Code span at start: `[start](url)` text
Text then code span: text `[end](url)`
Complex: `Array<[T]>` and `Map<[K, V]>` should be ignored
"#;
let config = Config::default();
let all_rules = rules::all_rules(&config);
let md054_rules: Vec<_> = all_rules.into_iter().filter(|r| r.name() == "MD054").collect();
let warnings = rumdl_lib::lint(content, &md054_rules, false, MarkdownFlavor::Standard, None, None).unwrap();
println!(
"MD054 produced {} warnings (no panic means indexing is fixed)",
warnings.len()
);
}
#[test]
fn test_md054_off_by_one_bug() {
let test_cases = [
"`[x](y)` [a](b)", " `[x](y)` [a](b)", " `[x](y)` [a](b)", "Text `[link](url)` more", "Some text `[end](url)`", "`[start](url)` and then text", "Unicode: 你好 `[link](url)` world", ];
let config = Config::default();
let all_rules = rules::all_rules(&config);
let md054_rules: Vec<_> = all_rules.into_iter().filter(|r| r.name() == "MD054").collect();
for (i, content) in test_cases.iter().enumerate() {
let result = rumdl_lib::lint(content, &md054_rules, false, MarkdownFlavor::Standard, None, None);
assert!(
result.is_ok(),
"Test case {} failed with content '{}': {:?}",
i + 1,
content,
result
);
}
}
#[test]
fn test_md054_regression_prevention() {
let content = r#"# Links
[Reference style][ref]
[ref]: https://example.com
<https://autolink.com>
[Inline style](https://example.com)
"#;
let config = Config::default();
let all_rules = rules::all_rules(&config);
let md054_rules: Vec<_> = all_rules.into_iter().filter(|r| r.name() == "MD054").collect();
let result = rumdl_lib::lint(content, &md054_rules, false, MarkdownFlavor::Standard, None, None);
assert!(result.is_ok(), "MD054 regression test failed: {result:?}");
if let Ok(warnings) = result {
println!("MD054 regression test produced {} warnings", warnings.len());
}
}
}