Update atomic call reply test for typed activation geometry
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user