Update atomic call reply test for typed activation geometry

This commit is contained in:
2026-09-12 15:23:18 -07:00
parent 40154983cc
commit 83f53c7c6e
+38 -5
View File
@@ -3253,12 +3253,45 @@ mod tests {
.iter()
.any(|l| l.id == steps[1] && l.dashed && l.label.contains("reply"))
);
assert!(
scene
.boxes
.iter()
.any(|b| b.id == steps[0] && b.rect.width == 8.)
assert_eq!(scene.activations.len(), 1);
let activation = &scene.activations[0];
assert_eq!(activation.call, steps[0]);
assert_eq!(activation.receiver, receiver);
assert_eq!(activation.scope, owner);
assert_eq!(
activation.finish,
scenario_activation::Finish::Reply(steps[1])
);
// Scene::draw paints this typed rectangle directly. Check its extent
// against the actual message endpoints, without fixing a style width.
let rect = activation.rect;
assert!(
[rect.x, rect.y, rect.width, rect.height]
.iter()
.all(|v| v.is_finite())
);
assert!(rect.width > 0. && rect.height > 0.);
let call_line = scene.lines.iter().find(|l| l.id == steps[0]).unwrap();
let reply_line = scene.lines.iter().find(|l| l.id == steps[1]).unwrap();
let received = *call_line.points.last().unwrap();
let returned = reply_line.points[0];
assert_eq!(rect.y, received.y);
assert_eq!(rect.y + rect.height, returned.y);
assert_eq!(received.x, returned.x);
assert!(received.x == rect.x || received.x == rect.x + rect.width);
assert!(!scene.boxes.iter().any(|b| b.id == steps[0]));
assert!(scene.open_calls.is_empty());
let interior = rect.center();
assert!(scene.lines.iter().filter(|l| !l.label.is_empty()).all(|l| {
l.points.windows(2).all(|p| {
crate::diagram::distance_to_segment(interior, p[0], p[1]) > 8. / scene.scale
}) && !Rectangle::new(
l.label_at,
Size::new((l.label.chars().count() as f32 * 6.8 + 8.).min(225.), 25.),
)
.contains(interior)
}));
assert_eq!(scene.hit(interior), Some(steps[0]));
let mut reply = State::default();
reply
.update(result, Event::Start(owner, Tool::Message))