@@ -3388,8 +3388,10 @@ mod tests {
33883388 use crate :: {
33893389 change_detection:: DetectChangesMut ,
33903390 component:: { ComponentDescriptor , ComponentInfo , StorageType } ,
3391+ entity:: EntityHashSet ,
33913392 ptr:: OwningPtr ,
33923393 system:: Resource ,
3394+ world:: error:: EntityFetchError ,
33933395 } ;
33943396 use alloc:: sync:: Arc ;
33953397 use bevy_ecs_macros:: Component ;
@@ -3926,4 +3928,104 @@ mod tests {
39263928 let mut world = World :: new ( ) ;
39273929 world. spawn ( ( ) ) ;
39283930 }
3931+
3932+ #[ test]
3933+ fn get_entity ( ) {
3934+ let mut world = World :: new ( ) ;
3935+
3936+ let e1 = world. spawn_empty ( ) . id ( ) ;
3937+ let e2 = world. spawn_empty ( ) . id ( ) ;
3938+
3939+ assert ! ( world. get_entity( e1) . is_ok( ) ) ;
3940+ assert ! ( world. get_entity( [ e1, e2] ) . is_ok( ) ) ;
3941+ assert ! ( world
3942+ . get_entity( & [ e1, e2] /* this is an array not a slice */ )
3943+ . is_ok( ) ) ;
3944+ assert ! ( world. get_entity( & vec![ e1, e2] [ ..] ) . is_ok( ) ) ;
3945+ assert ! ( world
3946+ . get_entity( & EntityHashSet :: from_iter( [ e1, e2] ) )
3947+ . is_ok( ) ) ;
3948+
3949+ world. entity_mut ( e1) . despawn ( ) ;
3950+
3951+ assert_eq ! ( Err ( e1) , world. get_entity( e1) . map( |_| { } ) ) ;
3952+ assert_eq ! ( Err ( e1) , world. get_entity( [ e1, e2] ) . map( |_| { } ) ) ;
3953+ assert_eq ! (
3954+ Err ( e1) ,
3955+ world
3956+ . get_entity( & [ e1, e2] /* this is an array not a slice */ )
3957+ . map( |_| { } )
3958+ ) ;
3959+ assert_eq ! ( Err ( e1) , world. get_entity( & vec![ e1, e2] [ ..] ) . map( |_| { } ) ) ;
3960+ assert_eq ! (
3961+ Err ( e1) ,
3962+ world
3963+ . get_entity( & EntityHashSet :: from_iter( [ e1, e2] ) )
3964+ . map( |_| { } )
3965+ ) ;
3966+ }
3967+
3968+ #[ test]
3969+ fn get_entity_mut ( ) {
3970+ let mut world = World :: new ( ) ;
3971+
3972+ let e1 = world. spawn_empty ( ) . id ( ) ;
3973+ let e2 = world. spawn_empty ( ) . id ( ) ;
3974+
3975+ assert ! ( world. get_entity_mut( e1) . is_ok( ) ) ;
3976+ assert ! ( world. get_entity_mut( [ e1, e2] ) . is_ok( ) ) ;
3977+ assert ! ( world
3978+ . get_entity_mut( & [ e1, e2] /* this is an array not a slice */ )
3979+ . is_ok( ) ) ;
3980+ assert ! ( world. get_entity_mut( & vec![ e1, e2] [ ..] ) . is_ok( ) ) ;
3981+ assert ! ( world
3982+ . get_entity_mut( & EntityHashSet :: from_iter( [ e1, e2] ) )
3983+ . is_ok( ) ) ;
3984+
3985+ assert_eq ! (
3986+ Err ( EntityFetchError :: AliasedMutability ( e1) ) ,
3987+ world. get_entity_mut( [ e1, e2, e1] ) . map( |_| { } )
3988+ ) ;
3989+ assert_eq ! (
3990+ Err ( EntityFetchError :: AliasedMutability ( e1) ) ,
3991+ world
3992+ . get_entity_mut( & [ e1, e2, e1] /* this is an array not a slice */ )
3993+ . map( |_| { } )
3994+ ) ;
3995+ assert_eq ! (
3996+ Err ( EntityFetchError :: AliasedMutability ( e1) ) ,
3997+ world. get_entity_mut( & vec![ e1, e2, e1] [ ..] ) . map( |_| { } )
3998+ ) ;
3999+ // Aliased mutability isn't allowed by HashSets
4000+ assert ! ( world
4001+ . get_entity_mut( & EntityHashSet :: from_iter( [ e1, e2, e1] ) )
4002+ . is_ok( ) ) ;
4003+
4004+ world. entity_mut ( e1) . despawn ( ) ;
4005+
4006+ assert_eq ! (
4007+ Err ( EntityFetchError :: NoSuchEntity ( e1) ) ,
4008+ world. get_entity_mut( e1) . map( |_| { } )
4009+ ) ;
4010+ assert_eq ! (
4011+ Err ( EntityFetchError :: NoSuchEntity ( e1) ) ,
4012+ world. get_entity_mut( [ e1, e2] ) . map( |_| { } )
4013+ ) ;
4014+ assert_eq ! (
4015+ Err ( EntityFetchError :: NoSuchEntity ( e1) ) ,
4016+ world
4017+ . get_entity_mut( & [ e1, e2] /* this is an array not a slice */ )
4018+ . map( |_| { } )
4019+ ) ;
4020+ assert_eq ! (
4021+ Err ( EntityFetchError :: NoSuchEntity ( e1) ) ,
4022+ world. get_entity_mut( & vec![ e1, e2] [ ..] ) . map( |_| { } )
4023+ ) ;
4024+ assert_eq ! (
4025+ Err ( EntityFetchError :: NoSuchEntity ( e1) ) ,
4026+ world
4027+ . get_entity_mut( & EntityHashSet :: from_iter( [ e1, e2] ) )
4028+ . map( |_| { } )
4029+ ) ;
4030+ }
39294031}
0 commit comments