use blitz_dom::Document as _;
use blitz_script::ScriptDocument;
fn document(script: &str) -> ScriptDocument {
let html = format!(
r#"<html><body style="margin:0">
<div id="host" style="width:800px; height:600px;">
<div id="splash" style="width:100%; height:100%;">Loading…</div>
</div>
<script>{script}</script>
</body></html>"#
);
let mut doc = ScriptDocument::from_html(&html, Default::default());
doc.poll(None);
doc.inner_mut().resolve(0.0);
doc
}
fn area_of(doc: &ScriptDocument, id: blitz_dom::NodeId) -> f32 {
let doc = doc.inner();
let Some(node) = doc.get_node(id) else {
return 0.0;
};
let layout = node.final_layout();
layout.size.width * layout.size.height
}
#[test]
fn a_removed_child_stops_occupying_space() {
let mut doc = document("");
let splash = doc
.inner()
.query_selector("#splash")
.unwrap()
.expect("no splash");
assert!(area_of(&doc, splash) > 0.0, "the fixture never laid it out");
doc.eval(
"var host = document.getElementById('host');\
host.removeChild(document.getElementById('splash'));",
);
doc.poll(None);
doc.inner_mut().resolve(0.0);
assert_eq!(
area_of(&doc, splash),
0.0,
"the removed splash still has a layout box"
);
}