rmv_bevy_testing_tools/traits/
collect_events.rs1use super::*;
2use crate::{
3 events::{CollectedEvents, EventCollectorPlugin, EventFilterPlugin},
4 prelude::TestApp,
5};
6
7pub trait CollectEvents {
8 fn collect_events<E: Event + Clone>(&mut self) -> &mut Self;
9 fn collect_events_only<E: Event + Clone + PartialEq>(&mut self, event: E) -> &mut Self;
10 fn collect_events_any_of<E: Event + Clone + PartialEq>(&mut self, events: &[E]) -> &mut Self;
11 fn get_collected_events<E: Event + Clone>(&self) -> Option<Vec<E>>;
12}
13
14impl CollectEvents for TestApp {
15 fn collect_events<E: Event + Clone>(&mut self) -> &mut TestApp {
16 self.add_plugins(EventCollectorPlugin::<E>::default());
17 self
18 }
19
20 fn collect_events_only<E: Event + Clone + PartialEq>(&mut self, event: E) -> &mut TestApp {
21 self.add_plugins(EventFilterPlugin::<E>::Only(event.clone()));
22 self
23 }
24
25 fn collect_events_any_of<E: Event + Clone + PartialEq>(&mut self, events: &[E]) -> &mut Self {
26 self.add_plugins(EventFilterPlugin::<E>::AnyOf(events.into()));
27 self
28 }
29
30 fn get_collected_events<E: Event + Clone>(&self) -> Option<Vec<E>> {
31 self.world()
32 .get_resource::<CollectedEvents<E>>()
33 .map(|e| e.get().clone())
34 }
35}