use flowmark::config::ListSpacing;
use flowmark::fill_markdown;
fn fmt(input: &str) -> String {
fill_markdown(input, true, 88, false, false, false, false, None, ListSpacing::Preserve)
}
#[test]
fn test_literal_tildes_before_numbers() {
let result = fmt("Target: ~60 seconds, ~130 words total\n");
assert_eq!(result, "Target: ~60 seconds, ~130 words total\n");
}
#[test]
fn test_literal_tildes_not_converted_to_double() {
let result = fmt("Target: ~60 seconds, ~130 words total");
assert!(!result.contains("~~"));
assert_eq!(result.trim(), "Target: ~60 seconds, ~130 words total");
}
#[test]
fn test_double_tilde_strikethrough() {
let result = fmt("This is ~~strikethrough~~ text\n");
assert_eq!(result, "This is ~~strikethrough~~ text\n");
}
#[test]
fn test_single_tilde_strikethrough() {
let result = fmt("This is ~strikethrough~ text\n");
assert_eq!(result, "This is ~~strikethrough~~ text\n");
}
#[test]
fn test_multiple_strikethroughs() {
let result = fmt("~one~ and ~two~ items\n");
assert_eq!(result, "~~one~~ and ~~two~~ items\n");
}
#[test]
fn test_single_tilde_no_closer() {
let result = fmt("About ~50% of users\n");
assert_eq!(result, "About ~50% of users\n");
}
#[test]
fn test_tildes_with_space_before_closer() {
let result = fmt("costs ~100 to ~200\n");
assert_eq!(result, "costs ~100 to ~200\n");
}
#[test]
fn test_escaped_tildes_preserved() {
let result = fmt("Target: \\~60 seconds, \\~130 words total\n");
assert_eq!(result, "Target: \\~60 seconds, \\~130 words total\n");
}
#[test]
fn test_strikethrough_in_paragraph() {
let result = fmt("This paragraph has some ~~deleted text~~ in it and also mentions ~50 users.");
assert!(result.contains("~~deleted text~~"));
assert!(result.contains("~50 users"));
assert!(!result.contains("~~50"));
}
#[test]
fn test_tilde_space_after_opener() {
let result = fmt("~ spaced ~\n");
assert_eq!(result, "~ spaced ~\n");
}
#[test]
fn test_tilde_space_before_closer() {
let result = fmt("~foo ~\n");
assert_eq!(result, "~foo ~\n");
}
#[test]
fn test_tilde_before_and_inside_parens() {
let result = fmt("~100 (~200)\n");
assert_eq!(result, "~100 (~200)\n");
}
#[test]
fn test_tilde_before_and_inside_parens_fill() {
let result = fmt("~100 (~200)");
assert!(!result.contains("~~"));
assert_eq!(result.trim(), "~100 (~200)");
}
#[test]
fn test_tilde_only_inside_parens() {
let result = fmt("100 (~200)\n");
assert_eq!(result, "100 (~200)\n");
}
#[test]
fn test_tilde_inside_parens_with_text() {
let result = fmt("~100 (x ~200)\n");
assert_eq!(result, "~100 (x ~200)\n");
}
#[test]
fn test_tilde_in_parens_then_outside() {
let result = fmt("(~200) ~100\n");
assert_eq!(result, "(~200) ~100\n");
}
#[test]
fn test_tilde_before_parens_no_tilde_inside() {
let result = fmt("~100 (200)\n");
assert_eq!(result, "~100 (200)\n");
}
#[test]
fn test_strikethrough_inside_parens() {
let result = fmt("(~~text~~) end\n");
assert_eq!(result, "(~~text~~) end\n");
}
#[test]
fn test_strikethrough_after_punctuation() {
let result = fmt("\"~~text~~\" end\n");
assert_eq!(result, "\"~~text~~\" end\n");
}
#[test]
fn test_strikethrough_with_punctuation_content() {
let result = fmt("~~hello!~~ end\n");
assert_eq!(result, "~~hello!~~ end\n");
}
#[test]
fn test_tilde_in_brackets() {
let result = fmt("~100 [~200]\n");
assert!(!result.contains("~~"));
}