Skip to content

Commit 719f7d6

Browse files
Add tests
1 parent ad6a567 commit 719f7d6

File tree

1 file changed

+68
-24
lines changed
  • crates/bevy_ecs/src/schedule/executor

1 file changed

+68
-24
lines changed

crates/bevy_ecs/src/schedule/executor/mod.rs

+68-24
Original file line numberDiff line numberDiff line change
@@ -312,17 +312,14 @@ mod __rust_begin_short_backtrace {
312312
#[cfg(test)]
313313
mod tests {
314314
use crate::{
315-
prelude::{IntoScheduleConfigs, Resource, Schedule, SystemSet},
315+
prelude::{Component, Resource, Schedule},
316316
schedule::ExecutorKind,
317-
system::Commands,
317+
system::{Commands, Res, ResMut, Single},
318318
world::World,
319319
};
320320

321-
#[derive(Resource)]
322-
struct R1;
323-
324-
#[derive(Resource)]
325-
struct R2;
321+
#[derive(Component)]
322+
struct TestComponent;
326323

327324
const EXECUTORS: [ExecutorKind; 3] = [
328325
ExecutorKind::Simple,
@@ -331,30 +328,77 @@ mod tests {
331328
];
332329

333330
#[test]
334-
fn invalid_system_param_skips() {
331+
fn single_and_populated_skipped_and_run() {
335332
for executor in EXECUTORS {
336-
invalid_system_param_skips_core(executor);
333+
std::println!("Testing executor: {:?}", executor);
334+
335+
let mut world = World::new();
336+
world.init_resource::<TestState>();
337+
338+
let mut schedule = Schedule::default();
339+
schedule.set_executor_kind(executor);
340+
schedule.add_systems((set_single_state, set_populated_state));
341+
schedule.run(&mut world);
342+
343+
let state = world.get_resource::<TestState>().unwrap();
344+
assert!(!state.single_ran);
345+
assert!(!state.populated_ran);
346+
347+
world.spawn(TestComponent);
348+
349+
schedule.run(&mut world);
350+
let state = world.get_resource::<TestState>().unwrap();
351+
assert!(state.single_ran);
352+
assert!(state.populated_ran);
337353
}
338354
}
339355

340-
fn invalid_system_param_skips_core(executor: ExecutorKind) {
356+
#[derive(Resource, Default)]
357+
struct TestState {
358+
populated_ran: bool,
359+
single_ran: bool,
360+
}
361+
362+
fn set_single_state(mut _single: Single<&TestComponent>, mut state: ResMut<TestState>) {
363+
state.single_ran = true;
364+
}
365+
366+
fn set_populated_state(mut _commands: Commands, mut state: ResMut<TestState>) {
367+
state.populated_ran = true;
368+
}
369+
370+
fn look_for_missing_resource(_res: Res<TestState>) {}
371+
372+
#[test]
373+
#[should_panic]
374+
fn missing_resource_panics_simple() {
375+
let mut world = World::new();
376+
let mut schedule = Schedule::default();
377+
378+
schedule.set_executor_kind(ExecutorKind::Simple);
379+
schedule.add_systems(look_for_missing_resource);
380+
schedule.run(&mut world);
381+
}
382+
383+
#[test]
384+
#[should_panic]
385+
fn missing_resource_panics_single_threaded() {
341386
let mut world = World::new();
342387
let mut schedule = Schedule::default();
343-
schedule.set_executor_kind(executor);
344-
schedule.add_systems(
345-
(
346-
// This system depends on a system that is always skipped.
347-
(|mut commands: Commands| {
348-
commands.insert_resource(R2);
349-
}),
350-
)
351-
.chain(),
352-
);
388+
389+
schedule.set_executor_kind(ExecutorKind::SingleThreaded);
390+
schedule.add_systems(look_for_missing_resource);
353391
schedule.run(&mut world);
354-
assert!(world.get_resource::<R1>().is_none());
355-
assert!(world.get_resource::<R2>().is_some());
356392
}
357393

358-
#[derive(SystemSet, Hash, Debug, PartialEq, Eq, Clone)]
359-
struct S1;
394+
#[test]
395+
#[should_panic]
396+
fn missing_resource_panics_multi_threaded() {
397+
let mut world = World::new();
398+
let mut schedule = Schedule::default();
399+
400+
schedule.set_executor_kind(ExecutorKind::MultiThreaded);
401+
schedule.add_systems(look_for_missing_resource);
402+
schedule.run(&mut world);
403+
}
360404
}

0 commit comments

Comments
 (0)