diff --git a/crates/bevy_transform/src/systems.rs b/crates/bevy_transform/src/systems.rs index e7bd9789d3df7..672e67b513523 100644 --- a/crates/bevy_transform/src/systems.rs +++ b/crates/bevy_transform/src/systems.rs @@ -113,7 +113,7 @@ mod test { let mut update_stage = SystemStage::parallel(); update_stage.add_system(parent_update_system); - update_stage.add_system(transform_propagate_system); + update_stage.add_system(transform_propagate_system.after(parent_update_system)); let mut schedule = Schedule::default(); schedule.add_stage("update", update_stage); @@ -158,7 +158,7 @@ mod test { let mut update_stage = SystemStage::parallel(); update_stage.add_system(parent_update_system); - update_stage.add_system(transform_propagate_system); + update_stage.add_system(transform_propagate_system.after(parent_update_system)); let mut schedule = Schedule::default(); schedule.add_stage("update", update_stage); @@ -201,7 +201,7 @@ mod test { let mut update_stage = SystemStage::parallel(); update_stage.add_system(parent_update_system); - update_stage.add_system(transform_propagate_system); + update_stage.add_system(transform_propagate_system.after(parent_update_system)); let mut schedule = Schedule::default(); schedule.add_stage("update", update_stage); @@ -286,7 +286,7 @@ mod test { let mut app = App::new(); app.add_system(parent_update_system); - app.add_system(transform_propagate_system); + app.add_system(transform_propagate_system.after(parent_update_system)); let translation = vec3(1.0, 0.0, 0.0); @@ -339,19 +339,20 @@ mod test { #[test] #[should_panic] fn panic_when_hierarchy_cycle() { - let mut app = App::new(); + let mut world = World::default(); + // This test is run on a single thread in order to avoid breaking the global task pool by panicking + // This fixes the flaky tests reported in https://github.com/bevyengine/bevy/issues/4996 + let mut update_stage = SystemStage::single_threaded(); - app.add_system(parent_update_system); - app.add_system(transform_propagate_system); + update_stage.add_system(parent_update_system); + update_stage.add_system(transform_propagate_system.after(parent_update_system)); - let child = app - .world + let child = world .spawn() .insert_bundle((Transform::identity(), GlobalTransform::default())) .id(); - let grandchild = app - .world + let grandchild = world .spawn() .insert_bundle(( Transform::identity(), @@ -359,13 +360,13 @@ mod test { Parent(child), )) .id(); - app.world.spawn().insert_bundle(( + world.spawn().insert_bundle(( Transform::default(), GlobalTransform::default(), Children::with(&[child]), )); - app.world.entity_mut(child).insert(Parent(grandchild)); + world.entity_mut(child).insert(Parent(grandchild)); - app.update(); + update_stage.run(&mut world); } }