98 lines
3.0 KiB
Rust
98 lines
3.0 KiB
Rust
use super::*;
|
|
use oa_core::view_options::{ExchangeLabels, RelationKinds};
|
|
|
|
#[test]
|
|
fn communication_svg_uses_saved_visibility_labels_and_direction() {
|
|
let mut p = Project::empty();
|
|
let a = p
|
|
.add_element(Kind::Entity, Layer::Oa, "Crew", None)
|
|
.unwrap();
|
|
let b = p
|
|
.add_element(Kind::Actor, Layer::Oa, "Station", None)
|
|
.unwrap();
|
|
let item = p
|
|
.add_element(Kind::ExchangeItem, Layer::Oa, "Data & status", None)
|
|
.unwrap();
|
|
let edge = p.relate(RelationKind::CommunicationMean, "Radio <link>", a, b);
|
|
let RelationBody::CommunicationMean { items, .. } =
|
|
&mut p.relations.get_mut(&edge).unwrap().body
|
|
else {
|
|
unreachable!()
|
|
};
|
|
items.push(item);
|
|
let diagram = p.ensure_diagram(Layer::Oa);
|
|
p.diagrams.get_mut(&diagram).unwrap().projection = ProjectionKind::Overview;
|
|
p.place(diagram, a, Position { x: 50., y: 80. });
|
|
p.place(diagram, b, Position { x: 650., y: 80. });
|
|
validate_candidate(&p).unwrap();
|
|
let initial = p.clone();
|
|
let path_key = format!("<path data-edge=\"{edge}\"");
|
|
let svg = export_svg(&p, diagram).expect("supported diagram");
|
|
let edge_path = svg
|
|
.split(&path_key)
|
|
.nth(1)
|
|
.unwrap()
|
|
.split("</path>")
|
|
.next()
|
|
.unwrap();
|
|
assert!(!edge_path.contains("marker-end"));
|
|
assert!(svg.contains("Radio <link>"));
|
|
assert_eq!(
|
|
p, initial,
|
|
"Export must not author presentation or model changes"
|
|
);
|
|
p.diagrams
|
|
.get_mut(&diagram)
|
|
.unwrap()
|
|
.view_options
|
|
.exchange_labels = ExchangeLabels::Items;
|
|
let items_svg = export_svg(&p, diagram).expect("supported diagram");
|
|
assert!(items_svg.contains("Data & status"));
|
|
let RelationBody::CommunicationMean { oriented, .. } =
|
|
&mut p.relations.get_mut(&edge).unwrap().body
|
|
else {
|
|
unreachable!()
|
|
};
|
|
*oriented = true;
|
|
let svg = export_svg(&p, diagram).expect("supported diagram");
|
|
assert!(
|
|
svg.split(&path_key)
|
|
.nth(1)
|
|
.unwrap()
|
|
.split("</path>")
|
|
.next()
|
|
.unwrap()
|
|
.contains("marker-end")
|
|
);
|
|
let placements = p.diagrams[&diagram].nodes.clone();
|
|
p.diagrams
|
|
.get_mut(&diagram)
|
|
.unwrap()
|
|
.view_options
|
|
.hidden_edges
|
|
.push(edge);
|
|
assert!(
|
|
!export_svg(&p, diagram)
|
|
.expect("supported diagram")
|
|
.contains(&path_key)
|
|
);
|
|
p.diagrams
|
|
.get_mut(&diagram)
|
|
.unwrap()
|
|
.view_options
|
|
.hidden_edges
|
|
.clear();
|
|
p.diagrams
|
|
.get_mut(&diagram)
|
|
.unwrap()
|
|
.view_options
|
|
.relation_kinds = RelationKinds::Only(vec![]);
|
|
assert!(
|
|
!export_svg(&p, diagram)
|
|
.expect("supported diagram")
|
|
.contains(&path_key)
|
|
);
|
|
assert_eq!(p.diagrams[&diagram].nodes, placements);
|
|
assert_eq!(language::parse(&language::format(&p)).unwrap(), p);
|
|
}
|