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 ", 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!("") .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); 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); assert!( svg.split(&path_key) .nth(1) .unwrap() .split("") .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).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).contains(&path_key)); assert_eq!(p.diagrams[&diagram].nodes, placements); assert_eq!(language::parse(&language::format(&p)).unwrap(), p); }