rmv_bevy_testing_tools/traits/
collect_events.rs

1use 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}