Complete canvas scope wiring and use Tokio for mounted Scenario test

This commit is contained in:
2026-09-12 23:35:34 -07:00
parent 2c9cd2b3e6
commit 83e840e37f
2 changed files with 58 additions and 59 deletions
@@ -65,6 +65,7 @@ impl App {
owner: context.owner, owner: context.owner,
revision: context.revision, revision: context.revision,
epoch: lifetime, epoch: lifetime,
scenario_view: None,
}; };
if self.behavior.has_pending() if self.behavior.has_pending()
|| self.draft_dirty() || self.draft_dirty()
@@ -166,66 +166,64 @@ fn source_cross_layer_owner_retarget_undo_redo_keeps_requested_saved_uuid() {
retarget(true); retarget(true);
} }
#[test] #[tokio::test]
fn source_deleted_owner_and_saved_view_mount_unavailable_instead_of_another_behavior() { async fn source_deleted_owner_and_saved_view_mount_unavailable_instead_of_another_behavior() {
iced::futures::executor::block_on(async { let mut f = fixture();
let mut f = fixture(); let before = f.app.document.snapshot();
let before = f.app.document.snapshot(); let mut expected = before.decoded.project.clone();
let mut expected = before.decoded.project.clone(); assert!(expected.elements.remove(&f.owner).is_some());
assert!(expected.elements.remove(&f.owner).is_some()); assert!(expected.diagrams.remove(&f.view).is_some());
assert!(expected.diagrams.remove(&f.view).is_some()); assert!(expected.elements.contains_key(&f.same_layer));
assert!(expected.elements.contains_key(&f.same_layer)); assert!(
assert!( expected
expected .elements
.elements .values()
.values() .any(|e| e.kind() == Kind::Process)
.any(|e| e.kind() == Kind::Process) );
); adopt_from_source(&mut f.app, &expected);
adopt_from_source(&mut f.app, &expected); assert_eq!(
assert_eq!( f.app.behavior.scenario.representation(),
f.app.behavior.scenario.representation(), Some(Representation::Saved { diagram: f.view })
Some(Representation::Saved { diagram: f.view }) );
); let adopted = f.app.document.snapshot();
let adopted = f.app.document.snapshot(); let revision = f.app.document.revision();
let revision = f.app.document.revision(); let mut mounted = Mounted::new(&mut f.app).await;
let mut mounted = Mounted::new(&mut f.app).await; let geometry = mounted.geometry(&f.app);
let geometry = mounted.geometry(&f.app); assert!(
assert!( geometry
geometry .containers
.containers .contains_key(&widget::Id::from("scenario-viewport-unavailable"))
.contains_key(&widget::Id::from("scenario-viewport-unavailable")) );
); assert!(
assert!( !geometry
!geometry .containers
.containers .contains_key(&widget::Id::from("scenario-viewport"))
.contains_key(&widget::Id::from("scenario-viewport")) );
); assert_eq!(f.app.project(), &expected);
assert_eq!(f.app.project(), &expected); assert_eq!(f.app.document.bundle(), &adopted.bundle);
assert_eq!(f.app.document.bundle(), &adopted.bundle); assert_eq!(
assert_eq!( f.app.document.revision(),
f.app.document.revision(), revision,
revision, "mounting unavailable must remain passive"
"mounting unavailable must remain passive" );
);
let _ = f.app.update(Message::Undo); let _ = f.app.update(Message::Undo);
assert_saved(&f.app, f.view, f.owner, Layer::Oa); assert_saved(&f.app, f.view, f.owner, Layer::Oa);
assert_eq!(f.app.document.bundle(), &before.bundle); assert_eq!(f.app.document.bundle(), &before.bundle);
let _ = f.app.update(Message::Redo); let _ = f.app.update(Message::Redo);
assert_eq!( assert_eq!(
f.app.behavior.scenario.representation(), f.app.behavior.scenario.representation(),
Some(Representation::Saved { diagram: f.view }) Some(Representation::Saved { diagram: f.view })
); );
mounted.settle(&mut f.app).await; mounted.settle(&mut f.app).await;
assert!( assert!(
mounted mounted
.geometry(&f.app) .geometry(&f.app)
.containers .containers
.contains_key(&widget::Id::from("scenario-viewport-unavailable")) .contains_key(&widget::Id::from("scenario-viewport-unavailable"))
); );
assert_eq!(f.app.project(), &expected); assert_eq!(f.app.project(), &expected);
assert_eq!(f.app.document.bundle(), &adopted.bundle); assert_eq!(f.app.document.bundle(), &adopted.bundle);
});
} }
#[test] #[test]