Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…#10609)

Bevy introduced unintentional breaking behaviour along with the v0.12.0
release regarding the `App::set_runner` API. See: bevyengine#10385, bevyengine#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 and Ray Redondo committed Jan 9, 2024
1 parent a02cb76 commit 7e6d30a
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 7e6d30a

Please sign in to comment.