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