mod common;
use common::conv_with;
use mdka::options::{ConversionMode, ConversionOptions};
const MODES: [ConversionMode; 5] = [
ConversionMode::Balanced,
ConversionMode::Strict,
ConversionMode::Minimal,
ConversionMode::Semantic,
ConversionMode::Preserve,
];
const SHELL_HTML: &str = r#"<nav><a href="/">Home</a></nav><main><p>Content</p></main>"#;
const WRAPPER_HTML: &str = r#"Before<div class="wrap"><span>inner</span></div>After"#;
#[test]
fn drop_interactive_shell_toggle_changes_output_in_every_mode() {
let expected_baseline = [
"[Home](/)\n\nContent\n", "[Home](/)\n\nContent\n", "Content\n", "[Home](/)\n\nContent\n", "[Home](/)\n\nContent\n", ];
let expected_flipped = [
"Content\n", "Content\n", "[Home](/)\n\nContent\n", "Content\n", "Content\n", ];
for ((mode, exp_base), exp_flip) in MODES
.iter()
.zip(expected_baseline.iter())
.zip(expected_flipped.iter())
{
let mut opts = ConversionOptions::for_mode(*mode);
let base = conv_with(SHELL_HTML, &opts);
assert_eq!(&base, exp_base, "{mode} baseline mismatch");
let default_value = opts.drop_interactive_shell;
opts.drop_interactive_shell = !default_value;
let flipped = conv_with(SHELL_HTML, &opts);
assert_eq!(&flipped, exp_flip, "{mode} flipped mismatch");
assert_ne!(
base, flipped,
"{mode}: drop_interactive_shell toggle unexpectedly changed nothing"
);
}
}
#[test]
fn unwrap_unknown_wrappers_toggle_changes_output_in_every_mode() {
let expected_baseline = [
"Before\n\ninner\n\nAfter\n", "Before\n\ninner\n\nAfter\n", "BeforeinnerAfter\n", "BeforeinnerAfter\n", "Before\n\ninner\n\nAfter\n", ];
let expected_flipped = [
"BeforeinnerAfter\n", "BeforeinnerAfter\n", "Before\n\ninner\n\nAfter\n", "Before\n\ninner\n\nAfter\n", "BeforeinnerAfter\n", ];
for ((mode, exp_base), exp_flip) in MODES
.iter()
.zip(expected_baseline.iter())
.zip(expected_flipped.iter())
{
let mut opts = ConversionOptions::for_mode(*mode);
let base = conv_with(WRAPPER_HTML, &opts);
assert_eq!(&base, exp_base, "{mode} baseline mismatch");
let default_value = opts.unwrap_unknown_wrappers;
opts.unwrap_unknown_wrappers = !default_value;
let flipped = conv_with(WRAPPER_HTML, &opts);
assert_eq!(&flipped, exp_flip, "{mode} flipped mismatch");
assert_ne!(
base, flipped,
"{mode}: unwrap_unknown_wrappers toggle unexpectedly changed nothing"
);
}
}
#[test]
fn unwrap_unknown_wrappers_naive_fixture_shows_no_difference() {
let html = r#"<p>Before</p><div class="wrap"><span>inner</span></div><p>After</p>"#;
for mode in MODES {
let mut opts = ConversionOptions::for_mode(mode);
let base = conv_with(html, &opts);
let default_value = opts.unwrap_unknown_wrappers;
opts.unwrap_unknown_wrappers = !default_value;
let flipped = conv_with(html, &opts);
assert_eq!(
base, flipped,
"{mode}: expected the naive fixture to show no difference"
);
assert_eq!(base, "Before\n\ninner\n\nAfter\n", "{mode} baseline value");
}
}