use satteri_pulldown_cmark::Options;
fn render(input: &str, opts: Options) -> String {
let (arena, _) = satteri_pulldown_cmark::parse(input, opts);
satteri_ast::mdast_to_html(&arena)
}
#[test]
fn deflist_renders_description_list() {
let html = render("Apple\n: Red.\n", Options::ENABLE_DEFINITION_LIST);
assert_eq!(html.trim(), "<dl>\n<dt>Apple</dt>\n<dd>Red.</dd>\n</dl>");
}
#[test]
fn directive_parse_is_unaffected_by_deflist() {
let dir = Options::ENABLE_DIRECTIVE;
let dl = Options::ENABLE_DEFINITION_LIST;
let doc = ":::note\nbody\n:::\n";
assert_eq!(render(doc, dir), render(doc, dir | dl));
}
#[test]
fn deflist_and_directive_coexist_in_one_document() {
let both = Options::ENABLE_DIRECTIVE | Options::ENABLE_DEFINITION_LIST;
let html = render("Apple\n: Red.\n\n:::note\nbody\n:::\n", both);
assert!(html.contains("<dl>"), "deflist entry lost: {html}");
assert!(html.contains("<dd>Red.</dd>"), "definition lost: {html}");
assert!(
!html.contains("<dd>:"),
"directive fence leaked into dd: {html}"
);
}
#[test]
fn deflist_only_leaves_directive_fences_as_paragraphs() {
let dl = Options::ENABLE_DEFINITION_LIST;
for input in [
":::note\nbody\n:::\n",
"Term\n::: nope\n",
"Term\n:: nope\n",
] {
let out = render(input, dl);
assert!(
!out.contains("<dl>"),
"colons became a deflist for {input:?}: {out}"
);
assert!(
!out.contains("<dd>"),
"colons became a dd for {input:?}: {out}"
);
}
}
#[test]
fn leaf_directive_parse_is_unaffected_by_deflist() {
let dir = Options::ENABLE_DIRECTIVE;
let dl = Options::ENABLE_DEFINITION_LIST;
let doc = "::note[label]{#id}\n";
assert_eq!(render(doc, dir), render(doc, dir | dl));
}
#[test]
fn both_extensions_off_leaves_colon_shapes_literal() {
let out = render("Apple\n: Red.\n\n:::note\nbody\n:::\n", Options::empty());
assert!(!out.contains("<dl>"), "unexpected deflist: {out}");
assert!(!out.contains("<dd>"), "unexpected dd: {out}");
}