use super::super::*;
use super::make_global_arrangement;
use bevy_ecs::world::World;
#[test]
fn test_hit_test_entity_ex_named_regions_rect_hit() {
let mut world = World::new();
let region_map = HitRegionMap::builder()
.rect("head", 20.0, 0.0, 60.0, 40.0) .build()
.unwrap();
let entity = world
.spawn((
make_global_arrangement(0.0, 0.0, 100.0, 100.0),
HitTest::named_regions(),
region_map,
))
.id();
let point = PhysicalPoint::new(50.0, 20.0);
match hit_test_entity_ex(&world, entity, point) {
RegionHit::Hit(Some(name)) => assert_eq!(name, "head"),
other => panic!(
"Expected Hit(Some('head')), got {:?}",
match other {
RegionHit::Miss => "Miss",
RegionHit::Hit(None) => "Hit(None)",
RegionHit::Hit(Some(_)) => "Hit(Some(...))",
}
),
}
}
#[test]
fn test_hit_test_entity_ex_named_regions_no_region() {
let mut world = World::new();
let region_map = HitRegionMap::builder()
.rect("head", 20.0, 0.0, 60.0, 40.0)
.build()
.unwrap();
let entity = world
.spawn((
make_global_arrangement(0.0, 0.0, 100.0, 100.0),
HitTest::named_regions(),
region_map,
))
.id();
let point = PhysicalPoint::new(5.0, 80.0);
match hit_test_entity_ex(&world, entity, point) {
RegionHit::Hit(None) => {} other => panic!(
"Expected Hit(None), got {:?}",
match other {
RegionHit::Miss => "Miss",
RegionHit::Hit(None) => "Hit(None)",
RegionHit::Hit(Some(ref s)) => s.as_str(),
}
),
}
}
#[test]
fn test_hit_test_entity_ex_named_regions_no_region_map_fallback() {
let mut world = World::new();
let entity = world
.spawn((
make_global_arrangement(0.0, 0.0, 100.0, 100.0),
HitTest::named_regions(),
))
.id();
let point = PhysicalPoint::new(50.0, 50.0);
match hit_test_entity_ex(&world, entity, point) {
RegionHit::Hit(None) => {} other => panic!(
"Expected Hit(None) (fallback), got {:?}",
match other {
RegionHit::Miss => "Miss",
RegionHit::Hit(None) => "Hit(None)",
RegionHit::Hit(Some(ref s)) => s.as_str(),
}
),
}
}
#[test]
fn test_hit_test_entity_ex_bounds_mode_region_none() {
let mut world = World::new();
let entity = world
.spawn((
make_global_arrangement(0.0, 0.0, 100.0, 100.0),
HitTest::bounds(),
))
.id();
let point = PhysicalPoint::new(50.0, 50.0);
match hit_test_entity_ex(&world, entity, point) {
RegionHit::Hit(None) => {}
_ => panic!("Expected Hit(None) for Bounds mode"),
}
}
#[test]
fn test_hit_test_entity_ex_named_regions_degenerate_bounds_width() {
let mut world = World::new();
let region_map = HitRegionMap::builder()
.rect("head", 0.0, 0.0, 100.0, 100.0)
.build()
.unwrap();
let entity = world
.spawn((
make_global_arrangement(50.0, 0.0, 50.0, 100.0), HitTest::named_regions(),
region_map,
))
.id();
match hit_test_entity_ex(&world, entity, PhysicalPoint::new(50.0, 50.0)) {
RegionHit::Hit(None) => {}
other => panic!(
"Expected Hit(None) for degenerate bounds, got {:?}",
match other {
RegionHit::Miss => "Miss",
RegionHit::Hit(None) => "Hit(None)",
RegionHit::Hit(Some(ref s)) => s.as_str(),
}
),
}
}
#[test]
fn test_hit_test_entity_ex_named_regions_degenerate_bounds_height() {
let mut world = World::new();
let region_map = HitRegionMap::builder()
.rect("head", 0.0, 0.0, 100.0, 100.0)
.build()
.unwrap();
let entity = world
.spawn((
make_global_arrangement(0.0, 50.0, 100.0, 50.0), HitTest::named_regions(),
region_map,
))
.id();
match hit_test_entity_ex(&world, entity, PhysicalPoint::new(50.0, 50.0)) {
RegionHit::Hit(None) => {}
other => panic!(
"Expected Hit(None) for degenerate bounds, got {:?}",
match other {
RegionHit::Miss => "Miss",
RegionHit::Hit(None) => "Hit(None)",
RegionHit::Hit(Some(ref s)) => s.as_str(),
}
),
}
}
#[test]
fn test_hit_test_entity_ex_outside_bounds() {
let mut world = World::new();
let entity = world
.spawn((
make_global_arrangement(0.0, 0.0, 100.0, 100.0),
HitTest::named_regions(),
))
.id();
let point = PhysicalPoint::new(200.0, 200.0);
match hit_test_entity_ex(&world, entity, point) {
RegionHit::Miss => {}
_ => panic!("Expected Miss for outside bounds"),
}
}