Skip to content

Commit d07c2d0

Browse files
committed
add test
1 parent 123dcba commit d07c2d0

File tree

1 file changed

+41
-3
lines changed

1 file changed

+41
-3
lines changed

crates/bevy_mod_scripting_core/src/extractors.rs

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,16 +162,19 @@ fn individual_conflicts(conflicts: AccessConflicts) -> FixedBitSet {
162162

163163
fn get_all_access_ids(access: &Access<ComponentId>) -> Vec<(ReflectAccessId, bool)> {
164164
let mut access_all_read = Access::<ComponentId>::default();
165-
access_all_read.read_all_components();
165+
access_all_read.read_all();
166166

167167
let mut access_all_write = Access::<ComponentId>::default();
168-
access_all_write.write_all_components();
168+
access_all_write.write_all();
169169

170170
// read conflicts with each set to figure out the necessary locks
171171

172-
let read = individual_conflicts(access.get_conflicts(&access_all_read));
172+
let mut read = individual_conflicts(access.get_conflicts(&access_all_read));
173173
let written = individual_conflicts(access.get_conflicts(&access_all_write));
174174

175+
// remove reads from writes
176+
read.difference_with(&written);
177+
175178
let mut result = Vec::new();
176179
for c in read.ones() {
177180
result.push((
@@ -188,3 +191,38 @@ fn get_all_access_ids(access: &Access<ComponentId>) -> Vec<(ReflectAccessId, boo
188191

189192
result
190193
}
194+
195+
#[cfg(test)]
196+
mod test {
197+
use bevy::{
198+
app::Update,
199+
ecs::{
200+
component::Component,
201+
system::{Query, Resource},
202+
},
203+
};
204+
205+
use super::*;
206+
#[derive(Component)]
207+
struct Comp;
208+
209+
#[derive(Resource)]
210+
struct Res;
211+
212+
#[test]
213+
pub fn check_with_world_correctly_locks_resource_and_component() {
214+
let system_fn = |mut guard: WithWorldGuard<(ResMut<Res>, Query<&'static Comp>)>| {
215+
let (guard, (_res, _entity)) = guard.get_mut();
216+
assert_eq!(guard.list_accesses().len(), 2, "Expected 2 accesses");
217+
};
218+
219+
let mut app = bevy::app::App::new();
220+
app.add_systems(Update, system_fn);
221+
app.insert_resource(Res);
222+
app.world_mut().spawn(Comp);
223+
224+
app.cleanup();
225+
app.finish();
226+
app.update();
227+
}
228+
}

0 commit comments

Comments
 (0)