rmv_bevy_testing_tools/
test_app.rs

1use std::time::Duration;
2
3use bevy_app::{App, AppExit};
4use bevy_derive::{Deref, DerefMut};
5use bevy_ecs::{
6    event::{Event, SendBatchIds},
7    query::{QueryData, QueryFilter, QuerySingleError, ReadOnlyQueryData, WorldQuery},
8};
9use bevy_internal::time::{Time, Virtual};
10use bevy_state::state::{FreelyMutableState, NextState, State, States};
11
12use crate::{
13    events::{CollectedEvents, EventCollectorPlugin, EventFilterPlugin},
14    traits::{BasicQuery, CollectEvents, ImmediateQuery, ManageState, SendEvents, TimeControls},
15};
16
17#[derive(Debug, Deref, DerefMut)]
18pub struct TestApp(pub App);
19
20impl TestApp {
21    pub fn get_state<S: States>(&self) -> Option<&S> {
22        self.world().get_resource::<State<S>>().map(|s| s.get())
23    }
24    pub fn get_next_state<S: FreelyMutableState>(&self) -> Option<&NextState<S>> {
25        self.world().get_resource::<NextState<S>>()
26    }
27    pub fn set_next_state<S: FreelyMutableState>(&mut self, next: S) -> Option<()> {
28        self.world_mut()
29            .get_resource_mut::<NextState<S>>()
30            .map(|mut s| s.set(next))
31    }
32}
33
34// NOTE: this is now also handled by feature `bevy/bevy_ci_testing`
35impl Drop for TestApp {
36    fn drop(&mut self) {
37        self.world_mut().send_event(AppExit::Success);
38    }
39}