Move activation simulation to AnyWindowHandle

This commit is contained in:
Nathan Sobo 2023-08-07 19:45:43 -06:00
parent 486f5bc6ca
commit 0197d49230
3 changed files with 34 additions and 31 deletions

View file

@ -4087,6 +4087,29 @@ impl AnyWindowHandle {
pub fn remove<C: BorrowWindowContext>(&self, cx: &mut C) -> C::Result<()> { pub fn remove<C: BorrowWindowContext>(&self, cx: &mut C) -> C::Result<()> {
self.update(cx, |cx| cx.remove_window()) self.update(cx, |cx| cx.remove_window())
} }
pub fn simulate_activation(&self, cx: &mut TestAppContext) {
self.update(cx, |cx| {
let other_window_ids = cx
.windows
.keys()
.filter(|window_id| **window_id != self.window_id)
.copied()
.collect::<Vec<_>>();
for window_id in other_window_ids {
cx.window_changed_active_status(window_id, false)
}
cx.window_changed_active_status(self.window_id, true)
});
}
pub fn simulate_deactivation(&self, cx: &mut TestAppContext) {
self.update(cx, |cx| {
cx.window_changed_active_status(self.window_id, false);
})
}
} }
#[repr(transparent)] #[repr(transparent)]
@ -6726,25 +6749,25 @@ mod tests {
[("window 2", false), ("window 3", true)] [("window 2", false), ("window 3", true)]
); );
cx.simulate_window_activation(Some(window_2.id())); window_2.simulate_activation(cx);
assert_eq!( assert_eq!(
mem::take(&mut *events.borrow_mut()), mem::take(&mut *events.borrow_mut()),
[("window 3", false), ("window 2", true)] [("window 3", false), ("window 2", true)]
); );
cx.simulate_window_activation(Some(window_1.id())); window_1.simulate_activation(cx);
assert_eq!( assert_eq!(
mem::take(&mut *events.borrow_mut()), mem::take(&mut *events.borrow_mut()),
[("window 2", false), ("window 1", true)] [("window 2", false), ("window 1", true)]
); );
cx.simulate_window_activation(Some(window_3.id())); window_3.simulate_activation(cx);
assert_eq!( assert_eq!(
mem::take(&mut *events.borrow_mut()), mem::take(&mut *events.borrow_mut()),
[("window 1", false), ("window 3", true)] [("window 1", false), ("window 3", true)]
); );
cx.simulate_window_activation(Some(window_3.id())); window_3.simulate_activation(cx);
assert_eq!(mem::take(&mut *events.borrow_mut()), []); assert_eq!(mem::take(&mut *events.borrow_mut()), []);
} }

View file

@ -156,17 +156,16 @@ impl TestAppContext {
self.cx.borrow_mut().add_model(build_model) self.cx.borrow_mut().add_model(build_model)
} }
pub fn add_window<T, F>(&mut self, build_root_view: F) -> WindowHandle<T> pub fn add_window<V, F>(&mut self, build_root_view: F) -> WindowHandle<V>
where where
T: View, V: View,
F: FnOnce(&mut ViewContext<T>) -> T, F: FnOnce(&mut ViewContext<V>) -> V,
{ {
let window = self let window = self
.cx .cx
.borrow_mut() .borrow_mut()
.add_window(Default::default(), build_root_view); .add_window(Default::default(), build_root_view);
self.simulate_window_activation(Some(window.id())); window.simulate_activation(self);
WindowHandle::new(window.id()) WindowHandle::new(window.id())
} }
@ -321,25 +320,6 @@ impl TestAppContext {
self.platform_window_mut(window_id).resize_handlers = handlers; self.platform_window_mut(window_id).resize_handlers = handlers;
} }
pub fn simulate_window_activation(&self, to_activate: Option<usize>) {
self.cx.borrow_mut().update(|cx| {
let other_window_ids = cx
.windows
.keys()
.filter(|window_id| Some(**window_id) != to_activate)
.copied()
.collect::<Vec<_>>();
for window_id in other_window_ids {
cx.window_changed_active_status(window_id, false)
}
if let Some(to_activate) = to_activate {
cx.window_changed_active_status(to_activate, true)
}
});
}
pub fn is_window_edited(&self, window_id: usize) -> bool { pub fn is_window_edited(&self, window_id: usize) -> bool {
self.platform_window_mut(window_id).edited self.platform_window_mut(window_id).edited
} }

View file

@ -4530,7 +4530,7 @@ mod tests {
}); });
// Deactivating the window saves the file. // Deactivating the window saves the file.
cx.simulate_window_activation(None); window.simulate_deactivation(cx);
deterministic.run_until_parked(); deterministic.run_until_parked();
item.read_with(cx, |item, _| assert_eq!(item.save_count, 1)); item.read_with(cx, |item, _| assert_eq!(item.save_count, 1));
@ -4551,12 +4551,12 @@ mod tests {
item.read_with(cx, |item, _| assert_eq!(item.save_count, 2)); item.read_with(cx, |item, _| assert_eq!(item.save_count, 2));
// Deactivating the window still saves the file. // Deactivating the window still saves the file.
cx.simulate_window_activation(Some(window.id())); window.simulate_activation(cx);
item.update(cx, |item, cx| { item.update(cx, |item, cx| {
cx.focus_self(); cx.focus_self();
item.is_dirty = true; item.is_dirty = true;
}); });
cx.simulate_window_activation(None); window.simulate_deactivation(cx);
deterministic.run_until_parked(); deterministic.run_until_parked();
item.read_with(cx, |item, _| assert_eq!(item.save_count, 3)); item.read_with(cx, |item, _| assert_eq!(item.save_count, 3));