use std::time::{Duration, Instant};
fn nested_layout_cells(depth: usize, breadth: usize) -> String {
use std::fmt::Write as _;
if depth == 0 {
return "leaf".to_string();
}
let inner = nested_layout_cells(depth - 1, breadth);
let mut cells = String::new();
for _ in 0..breadth {
write!(cells, "<td><table><tr><td>{inner}</td></tr></table></td>").unwrap();
}
format!("<table><tr>{cells}</tr></table>")
}
#[test]
fn nested_layout_tables_convert_within_wall_clock_budget() {
let html = format!(
"<html><body><table><tr><td>{}</td></tr></table></body></html>",
nested_layout_cells(4, 4)
);
let start = Instant::now();
let result = html_to_markdown_rs::convert(&html, None).expect("conversion must succeed");
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_secs(10),
"issue #406: nested-layout-table conversion took {elapsed:?} (budget: 10s). \
Was the measure-width-only short-circuit in walk_node removed?"
);
let content = result.content.unwrap_or_default();
assert!(
content.contains("leaf"),
"leaf text must appear in output (otherwise the short-circuit is dropping content)"
);
}
#[test]
fn nested_layout_tables_render_within_outer_cell_width_cap() {
let html = format!(
"<html><body><table><tr><td>{}</td></tr></table></body></html>",
nested_layout_cells(5, 3)
);
let start = Instant::now();
let _ = html_to_markdown_rs::convert(&html, None).expect("conversion must succeed");
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_secs(10),
"issue #406: 5-deep × 3-wide nested-table conversion took {elapsed:?} (budget: 10s)"
);
}