rmv-bevy-testing-tools 0.6.1

Write simple tests for bevy systems, using rstest, insta, and speculoos.
Documentation
use super::*;
use crate::{
    events::{CollectedEvents, EventCollectorPlugin, EventFilterPlugin},
    prelude::TestApp,
};

pub trait CollectEvents {
    fn collect_events<E: Event + Clone>(&mut self) -> &mut Self;
    fn collect_events_only<E: Event + Clone + PartialEq>(&mut self, event: E) -> &mut Self;
    fn collect_events_any_of<E: Event + Clone + PartialEq>(&mut self, events: &[E]) -> &mut Self;
    fn get_collected_events<E: Event + Clone>(&self) -> Option<Vec<E>>;
}

impl CollectEvents for TestApp {
    fn collect_events<E: Event + Clone>(&mut self) -> &mut TestApp {
        self.add_plugins(EventCollectorPlugin::<E>::default());
        self
    }

    fn collect_events_only<E: Event + Clone + PartialEq>(&mut self, event: E) -> &mut TestApp {
        self.add_plugins(EventFilterPlugin::<E>::Only(event.clone()));
        self
    }

    fn collect_events_any_of<E: Event + Clone + PartialEq>(&mut self, events: &[E]) -> &mut Self {
        self.add_plugins(EventFilterPlugin::<E>::AnyOf(events.into()));
        self
    }

    fn get_collected_events<E: Event + Clone>(&self) -> Option<Vec<E>> {
        self.world()
            .get_resource::<CollectedEvents<E>>()
            .map(|e| e.get().clone())
    }
}