Skip to content

Commit 1ae7646

Browse files
Add tests
1 parent ad6a567 commit 1ae7646

File tree

1 file changed

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

1 file changed

+71
-24
lines changed

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

Lines changed: 71 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -312,49 +312,96 @@ 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::{Populated, 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,
329326
ExecutorKind::SingleThreaded,
330327
ExecutorKind::MultiThreaded,
331328
];
332329

330+
#[derive(Resource, Default)]
331+
struct TestState {
332+
populated_ran: bool,
333+
single_ran: bool,
334+
}
335+
336+
fn set_single_state(mut _single: Single<&TestComponent>, mut state: ResMut<TestState>) {
337+
state.single_ran = true;
338+
}
339+
340+
fn set_populated_state(
341+
mut _populated: Populated<&TestComponent>,
342+
mut state: ResMut<TestState>,
343+
) {
344+
state.populated_ran = true;
345+
}
346+
333347
#[test]
334-
fn invalid_system_param_skips() {
348+
fn single_and_populated_skipped_and_run() {
335349
for executor in EXECUTORS {
336-
invalid_system_param_skips_core(executor);
350+
std::println!("Testing executor: {:?}", executor);
351+
352+
let mut world = World::new();
353+
world.init_resource::<TestState>();
354+
355+
let mut schedule = Schedule::default();
356+
schedule.set_executor_kind(executor);
357+
schedule.add_systems((set_single_state, set_populated_state));
358+
schedule.run(&mut world);
359+
360+
let state = world.get_resource::<TestState>().unwrap();
361+
assert!(!state.single_ran);
362+
assert!(!state.populated_ran);
363+
364+
world.spawn(TestComponent);
365+
366+
schedule.run(&mut world);
367+
let state = world.get_resource::<TestState>().unwrap();
368+
assert!(state.single_ran);
369+
assert!(state.populated_ran);
337370
}
338371
}
339372

340-
fn invalid_system_param_skips_core(executor: ExecutorKind) {
373+
fn look_for_missing_resource(_res: Res<TestState>) {}
374+
375+
#[test]
376+
#[should_panic]
377+
fn missing_resource_panics_simple() {
378+
let mut world = World::new();
379+
let mut schedule = Schedule::default();
380+
381+
schedule.set_executor_kind(ExecutorKind::Simple);
382+
schedule.add_systems(look_for_missing_resource);
383+
schedule.run(&mut world);
384+
}
385+
386+
#[test]
387+
#[should_panic]
388+
fn missing_resource_panics_single_threaded() {
341389
let mut world = World::new();
342390
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-
);
391+
392+
schedule.set_executor_kind(ExecutorKind::SingleThreaded);
393+
schedule.add_systems(look_for_missing_resource);
353394
schedule.run(&mut world);
354-
assert!(world.get_resource::<R1>().is_none());
355-
assert!(world.get_resource::<R2>().is_some());
356395
}
357396

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

0 commit comments

Comments
 (0)