Skip to content

Commit

Permalink
add regression test for #10385/#10389 (#10609)
Browse files Browse the repository at this point in the history
Bevy introduced unintentional breaking behaviour along with the v0.12.0
release regarding the `App::set_runner` API. See: #10385, #10389 for
details. We weren't able to catch this before release because this API
is only used internally in one or two places (the very places which
motivated the break).

This commit adds a regression test to help guarantee some expected
behaviour for custom runners, namely that `app::update` won't be called
before the runner has a chance to initialise state.
  • Loading branch information
ickk authored Nov 18, 2023
1 parent 48d10e6 commit 29f711c
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions crates/bevy_app/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1204,4 +1204,36 @@ mod tests {
GenericLabel::<u64>(PhantomData).intern()
);
}

/// Custom runners should be in charge of when `app::update` gets called as they may need to
/// coordinate some state.
/// bug: <https://github.com/bevyengine/bevy/issues/10385>
/// fix: <https://github.com/bevyengine/bevy/pull/10389>
#[test]
fn regression_test_10385() {
use super::{Res, Resource};
use crate::PreUpdate;

#[derive(Resource)]
struct MyState {}

fn my_runner(mut app: App) {
let my_state = MyState {};
app.world.insert_resource(my_state);

for _ in 0..5 {
app.update();
}
}

fn my_system(_: Res<MyState>) {
// access state during app update
}

// Should not panic due to missing resource
App::new()
.set_runner(my_runner)
.add_systems(PreUpdate, my_system)
.run();
}
}

0 comments on commit 29f711c

Please sign in to comment.