Update atomic call reply test for typed activation geometry
This commit is contained in:
@@ -3253,12 +3253,45 @@ mod tests {
|
|||||||
.iter()
|
.iter()
|
||||||
.any(|l| l.id == steps[1] && l.dashed && l.label.contains("reply"))
|
.any(|l| l.id == steps[1] && l.dashed && l.label.contains("reply"))
|
||||||
);
|
);
|
||||||
assert!(
|
assert_eq!(scene.activations.len(), 1);
|
||||||
scene
|
let activation = &scene.activations[0];
|
||||||
.boxes
|
assert_eq!(activation.call, steps[0]);
|
||||||
.iter()
|
assert_eq!(activation.receiver, receiver);
|
||||||
.any(|b| b.id == steps[0] && b.rect.width == 8.)
|
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();
|
let mut reply = State::default();
|
||||||
reply
|
reply
|
||||||
.update(result, Event::Start(owner, Tool::Message))
|
.update(result, Event::Start(owner, Tool::Message))
|
||||||
|
|||||||
Reference in New Issue
Block a user