Files
ARCADIA-Studio/crates/oa-desktop/src/diagram/view_options_tests.rs
T

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 &lt;link&gt;"));
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 &amp; 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);
}