rmv_bevy_testing_tools/
test_app.rs1use 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
34impl Drop for TestApp {
36 fn drop(&mut self) {
37 self.world_mut().send_event(AppExit::Success);
38 }
39}