use rumdl_lib::lint_context::LintContext;
use rumdl_lib::rule::Rule;
use rumdl_lib::rules::{MD009TrailingSpaces, MD013LineLength};
use rumdl_lib::types::LineLength;
#[test]
fn test_md013_fix_counting_with_tables() {
let content = r#"# Test Document
This is a very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long line that can be reflowed.
| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| Short | Short | Short |
| This is a very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long table cell that cannot be reflowed | B | C |
Another very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long line that can be reflowed.
"#;
use rumdl_lib::rules::md013_line_length::md013_config::MD013Config;
use rumdl_lib::types::LineLength;
let config = MD013Config {
line_length: LineLength::from_const(80),
code_blocks: true,
tables: true, headings: true,
paragraphs: true,
blockquotes: true,
strict: false,
reflow: true, ..Default::default()
};
let rule = MD013LineLength::from_config_struct(config);
let ctx = LintContext::new(content, rumdl_lib::config::MarkdownFlavor::Standard, None);
let warnings = rule.check(&ctx).unwrap();
assert_eq!(warnings.len(), 3, "Should detect 3 long lines");
let fixed_content = rule.fix(&ctx).unwrap();
let ctx_fixed = LintContext::new(&fixed_content, rumdl_lib::config::MarkdownFlavor::Standard, None);
let remaining_warnings = rule.check(&ctx_fixed).unwrap();
assert_eq!(
remaining_warnings.len(),
1,
"Table row should still exceed line length after fix"
);
assert!(
remaining_warnings[0].line == 10,
"Remaining warning should be for the table row"
);
let actual_fixed_count = warnings.len() - remaining_warnings.len();
assert_eq!(actual_fixed_count, 2, "Only 2 of 3 warnings should be actually fixed");
}
#[test]
fn test_mixed_rules_fix_counting() {
let content = concat!(
"# Test\n",
"\n",
"This line has trailing spaces \n", "\n",
"| Column | Very very very very very very very very very very very very very very very very very very very very very very very very long header |\n",
"|--------|-----------|\n",
"| A | B |\n",
"\n",
"More trailing spaces \n" );
use rumdl_lib::rules::md013_line_length::md013_config::MD013Config;
let md013_config = MD013Config {
line_length: LineLength::from_const(80),
code_blocks: true,
tables: true, headings: true,
paragraphs: true,
blockquotes: true,
strict: false,
reflow: true,
..Default::default()
};
let md013 = MD013LineLength::from_config_struct(md013_config);
let md009 = MD009TrailingSpaces::default();
let ctx = LintContext::new(content, rumdl_lib::config::MarkdownFlavor::Standard, None);
let md013_warnings = md013.check(&ctx).unwrap();
assert_eq!(md013_warnings.len(), 1, "Should have 1 long line (table header)");
let md009_warnings = md009.check(&ctx).unwrap();
assert_eq!(md009_warnings.len(), 2, "Should have 2 trailing space warnings");
let fixed_by_md009 = md009.fix(&ctx).unwrap();
let ctx_after_md009 = LintContext::new(&fixed_by_md009, rumdl_lib::config::MarkdownFlavor::Standard, None);
let md009_remaining = md009.check(&ctx_after_md009).unwrap();
assert_eq!(md009_remaining.len(), 0, "All trailing spaces should be fixed");
let fixed_by_md013 = md013.fix(&ctx_after_md009).unwrap();
let ctx_after_md013 = LintContext::new(&fixed_by_md013, rumdl_lib::config::MarkdownFlavor::Standard, None);
let md013_remaining = md013.check(&ctx_after_md013).unwrap();
assert_eq!(md013_remaining.len(), 1, "Table header should still be too long");
}