").count(), 1, "{actual}");
assert_eq!(rendered.matches("| ").count(), 2, "{actual}");
}
}
#[test]
fn table_blocks_preserve_surrounding_inline_styles() {
for (tag, open, close) in [
("strong", "**", "**"),
("a href='/outer'", "[", "](/outer)"),
] {
let end_tag = tag.split(' ').next().unwrap();
let actual = markdown(&format!(
"<{tag}>beforeafter{end_tag}>"
));
assert_eq!(
actual,
format!(
"{open}before{close}\n\n| |\n| --- |\n| {open}cell{close} |\n\n{open}after{close}"
)
);
}
}
#[test]
fn multiple_heading_rows_fall_back_to_blocks() {
assert_eq!(
markdown(
""
),
"A\n\nB\n\none\n\ntwo\n\nthree\n\nfour"
);
}
#[test]
fn footer_only_tables_keep_the_footer_as_data() {
assert_eq!(
markdown(""),
"| |\n| --- |\n| Footer |"
);
}
#[test]
fn empty_headers_and_unit_spans_are_representable() {
let actual = markdown(
"",
);
assert_eq!(actual, "| | |\n| --- | --- |\n| one | two |");
assert!(rendered_html(&actual).contains(" | one | two | "));
assert_eq!(markdown(""), "");
assert_eq!(markdown(""), "");
}
#[test]
fn short_rows_do_not_expand_to_a_large_grid() {
for cell in ["th", "td"] {
let html = format!(
"",
format!("<{cell}>Header{cell}>").repeat(64),
"| cell |
".repeat(64)
);
let actual = markdown(&html);
assert!(
actual.len() < html.len(),
"short rows must not be padded to the header width"
);
let rendered = rendered_html(&actual);
assert_eq!(rendered.matches("cell | ").count(), 64);
let data_rows = if cell == "th" { 64 } else { 65 };
assert_eq!(rendered.matches("").count(), data_rows * 64);
}
}
#[test]
fn table_cells_respect_the_depth_limit() {
let dom = Tree::parse(
"",
);
let converter = Converter::new(Options {
max_depth: 6,
..Options::default()
});
assert_eq!(
converter.convert(&dom, dom.root),
"| Heading |\n| --- |\n| visible |"
);
assert_eq!(
convert(&dom, dom.root),
"| Heading |\n| --- |\n| visible*hidden* |"
);
}
#[test]
fn table_presentation_attributes_do_not_change_conversion() {
for attributes in [
"",
"border='0' width='100%'",
"border='1'",
"style='border:0'",
] {
let html = format!(
""
);
assert_eq!(
markdown(&html),
"| | |\n| --- | --- |\n| [Home](/) | [Help](/help) |"
);
}
}
#[test]
fn nested_tables_obey_the_conversion_depth_limit() {
let dom = Tree::parse(
"",
);
for (max_depth, expected) in [(6, "| |\n| --- |\n| visible |"), (7, "visible")] {
let converter = Converter::new(Options {
max_depth,
..Options::default()
});
assert_eq!(converter.convert(&dom, dom.root), expected);
}
assert_eq!(
convert(&dom, dom.root),
"visible\n\n| |\n| --- |\n| too deep |"
);
}
|