#![allow(deprecated)]
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 ATTR_HTML: &str =
r#"<p id="pid" class="pclass" data-k="v" aria-label="lbl" style="color:red" foo="bar">Hi</p>"#;
fn baseline(mode: ConversionMode) -> String {
conv_with(ATTR_HTML, &ConversionOptions::for_mode(mode))
}
fn assert_toggle_identical(field_name: &str, set_field: impl Fn(&mut ConversionOptions, bool)) {
for mode in MODES {
let base = baseline(mode);
let mut opts = ConversionOptions::for_mode(mode);
let default_value = field_name_default(field_name, &opts);
set_field(&mut opts, !default_value);
let flipped = conv_with(ATTR_HTML, &opts);
assert_eq!(
flipped, base,
"{field_name} in {mode}: expected flipping to change nothing, but output differed"
);
}
}
fn field_name_default(field_name: &str, opts: &ConversionOptions) -> bool {
match field_name {
"preserve_ids" => opts.preserve_ids,
"preserve_classes" => opts.preserve_classes,
"preserve_data_attrs" => opts.preserve_data_attrs,
"preserve_aria_attrs" => opts.preserve_aria_attrs,
"preserve_unknown_attrs" => opts.preserve_unknown_attrs,
"drop_presentation_attrs" => opts.drop_presentation_attrs,
other => panic!("unknown field in test: {other}"),
}
}
#[test]
fn preserve_ids_toggle_changes_output_in_every_mode() {
for mode in MODES {
let base = baseline(mode);
let mut opts = ConversionOptions::for_mode(mode);
let default_value = opts.preserve_ids;
opts.preserve_ids = !default_value;
let flipped = conv_with(ATTR_HTML, &opts);
assert_ne!(
flipped, base,
"preserve_ids in {mode}: expected flipping to change output (RFC 005 Slice B1), but it matched the baseline"
);
}
}
#[test]
fn preserve_classes_toggle_changes_nothing_in_any_mode() {
assert_toggle_identical("preserve_classes", |o, v| o.preserve_classes = v);
}
#[test]
fn preserve_data_attrs_toggle_changes_nothing_in_any_mode() {
assert_toggle_identical("preserve_data_attrs", |o, v| o.preserve_data_attrs = v);
}
#[test]
fn preserve_aria_attrs_toggle_changes_nothing_in_any_mode() {
assert_toggle_identical("preserve_aria_attrs", |o, v| o.preserve_aria_attrs = v);
}
#[test]
fn preserve_unknown_attrs_toggle_changes_nothing_in_any_mode() {
assert_toggle_identical("preserve_unknown_attrs", |o, v| {
o.preserve_unknown_attrs = v
});
}
#[test]
fn drop_presentation_attrs_toggle_changes_nothing_in_any_mode() {
assert_toggle_identical("drop_presentation_attrs", |o, v| {
o.drop_presentation_attrs = v
});
}