mod check;
mod diagram;
mod safe;
mod table;
use crate::cli::Mode;
#[must_use]
#[allow(dead_code)] pub fn process_by_mode(
mode: &Mode,
content: &str,
repair_fences: bool,
config: &crate::config::Config,
) -> String {
let _default_config = crate::config::Config::default();
let effective_config = config;
let content = if repair_fences {
crate::fences::normalize_fences(content)
} else {
content.to_string()
};
match mode {
Mode::Safe => safe::process_safe_mode(&content),
Mode::Diagram => diagram::process_diagram_mode(&content, effective_config),
Mode::Check => check::process_check_mode(&content),
}
}
#[must_use]
#[allow(dead_code)] pub fn content_needs_fixing(original: &str, processed: &str) -> bool {
original != processed
}
#[cfg(test)]
mod tests {
use super::*;
fn default_config() -> crate::config::Config {
crate::config::Config::default()
}
#[test]
fn test_all_modes_are_safe() {
let content = "# Header\n\nText content\n\nMore text";
let safe_result = process_by_mode(&Mode::Safe, content, false, &default_config());
let diagram_result = process_by_mode(&Mode::Diagram, content, false, &default_config());
let check_result = process_by_mode(&Mode::Check, content, false, &default_config());
assert!(!safe_result.is_empty());
assert!(!diagram_result.is_empty());
assert!(!check_result.is_empty());
}
#[test]
fn test_content_needs_fixing_detects_differences() {
let original = "┌──┐\n│Hi│\n└──┘";
let processed = process_by_mode(&Mode::Diagram, original, false, &default_config());
let needs_fixing = content_needs_fixing(original, &processed);
let _ = needs_fixing; }
#[test]
fn test_content_needs_fixing_detects_identical() {
let original = "# Title\n\nNo diagrams";
let processed = process_by_mode(&Mode::Diagram, original, false, &default_config());
let needs_fixing = content_needs_fixing(original, &processed);
assert!(!needs_fixing);
}
#[test]
fn test_content_needs_fixing_simple_case() {
let original = "abc";
let modified = "def";
assert!(content_needs_fixing(original, modified));
}
#[test]
fn test_content_needs_fixing_identical_strings() {
let content = "exact same content";
assert!(!content_needs_fixing(content, content));
}
#[test]
fn test_content_needs_fixing_ignores_trailing_whitespace() {
let original = "line1\nline2";
let modified = "line1\nline2";
assert!(!content_needs_fixing(original, modified));
}
}