rmv_bevy_testing_tools/
lib.rs1#![feature(coverage_attribute)]
2
3pub mod app;
6#[cfg(feature = "speculoos")]
7pub mod assertions;
8pub mod events;
9#[cfg(any(test, feature = "rstest"))]
10pub mod fixtures;
11pub mod traits;
12
13#[cfg(feature = "insta")]
14#[macro_export]
15macro_rules! set_snapshot_suffix {
16 ($($expr:expr),*) => {
17 let mut settings = insta::Settings::clone_current();
18 settings.set_snapshot_suffix(format!($($expr,)*));
19 let _guard = settings.bind_to_scope();
20 }
21}
22
23pub mod prelude {
24 #[cfg(feature = "speculoos")]
25 pub use super::assertions::*;
26 #[cfg(feature = "rstest")]
27 pub use super::fixtures::*;
28 #[cfg(feature = "insta")]
29 pub use super::set_snapshot_suffix;
30 pub use super::{app::*, events::*, traits::*};
31}
32
33#[cfg(test)]
34#[cfg_attr(coverage_nightly, coverage(off))]
35mod tests {
36 use bevy_ecs::event::Event;
37 use bevy_state::state::States;
38 use rstest::rstest;
39
40 use super::prelude::*;
41
42 #[derive(Event, Default, Debug, Copy, Clone)]
43 struct MyEvent;
44 #[derive(States, Debug, Default, Hash, PartialEq, Eq, Clone, Copy)]
45 enum MyState {
46 #[default]
47 A,
48 B,
49 }
50
51 #[cfg(feature = "rstest")]
52 #[rstest]
53 fn can_access_everything(#[from(test_app)] mut app: TestApp) {
54 if do_not_run() {
55 return;
56 }
57 use bevy_state::app::AppExtStates;
58
59 app.collect_events::<MyEvent>()
60 .send_event_default::<MyEvent>();
61
62 app.init_state::<MyState>();
63 app.set_next_state(MyState::B);
64 }
65
66 #[cfg(feature = "insta")]
67 #[rstest]
68 fn can_access_insta_macro() {
69 if do_not_run() {
70 return;
71 }
72 set_snapshot_suffix!("works");
73 }
74
75 #[cfg(feature = "speculoos")]
76 #[rstest]
77 fn can_access_assertions() {
78 if do_not_run() {
79 return;
80 }
81 use speculoos::assert_that;
82
83 let items = vec![1, 2, 3];
84 assert_that!(1).is_contained_in(&items);
85 }
86
87 #[cfg(feature = "iter_tools")]
88 #[rstest]
89 fn can_access_query_vec() {
90 if do_not_run() {
91 return;
92 }
93
94 use bevy_app::App;
95 use bevy_ecs::entity::Entity;
96
97 TestApp(App::new()).query_vec::<Entity>();
98 }
99
100 fn do_not_run() -> bool {
101 std::env::var("_SKIP_FEATURE_TESTS_")
103 .map(|s| matches!(s.as_str(), "true" | "1"))
104 .unwrap_or(true)
105 }
106}