use bevy_ecs::prelude::*;
use wintf::ecs::PointF;
use wintf::ecs::Visual;
use wintf::ecs::visual_resource_management_system;
use wintf::ecs::world::FrameCount;
use wintf::ecs::{GraphicsCore, VisualGraphics};
#[test]
fn test_visual_component_definition() {
let mut world = World::new();
let entity = world.spawn(Visual::default()).id();
let visual = world.get::<Visual>(entity).unwrap();
assert_eq!(visual.is_visible, true);
assert_eq!(visual.opacity, 1.0);
assert_eq!(visual.transform_origin.x, 0.0);
assert_eq!(visual.transform_origin.y, 0.0);
}
#[test]
fn test_visual_component_properties() {
let visual = Visual {
is_visible: false,
opacity: 0.5,
transform_origin: PointF { x: 10.0, y: 20.0 },
clip: None,
};
assert_eq!(visual.is_visible, false);
assert_eq!(visual.opacity, 0.5);
assert_eq!(visual.transform_origin.x, 10.0);
assert_eq!(visual.transform_origin.y, 20.0);
}
#[test]
fn test_visual_resource_creation() {
let mut world = World::new();
let graphics = GraphicsCore::new().expect("Failed to create GraphicsCore");
world.insert_resource(graphics);
world.insert_resource(FrameCount(1));
let mut schedule = Schedule::default();
schedule.add_systems(visual_resource_management_system);
let entity = world
.spawn((Visual::default(), VisualGraphics::default()))
.id();
schedule.run(&mut world);
assert!(
world.get::<VisualGraphics>(entity).is_some(),
"VisualGraphics should be created by visual_resource_management_system"
);
}
#[test]
fn test_visual_default_values() {
let visual = Visual::default();
assert_eq!(visual.opacity, 1.0);
assert_eq!(visual.is_visible, true);
assert_eq!(visual.clamped_opacity(), 1.0);
}
#[test]
fn test_visual_set_opacity_normal_range() {
let mut visual = Visual::default();
visual.set_opacity(0.5);
assert_eq!(visual.opacity, 0.5);
assert_eq!(visual.clamped_opacity(), 0.5);
}
#[test]
fn test_visual_set_opacity_boundary_zero() {
let mut visual = Visual::default();
visual.set_opacity(0.0);
assert_eq!(visual.opacity, 0.0);
assert_eq!(visual.clamped_opacity(), 0.0);
}
#[test]
fn test_visual_set_opacity_boundary_one() {
let mut visual = Visual::default();
visual.set_opacity(1.0);
assert_eq!(visual.opacity, 1.0);
assert_eq!(visual.clamped_opacity(), 1.0);
}
#[test]
fn test_visual_set_opacity_clamps_negative() {
let mut visual = Visual::default();
visual.set_opacity(-0.1);
assert_eq!(visual.opacity, 0.0);
assert_eq!(visual.clamped_opacity(), 0.0);
}
#[test]
fn test_visual_set_opacity_clamps_above_one() {
let mut visual = Visual::default();
visual.set_opacity(1.5);
assert_eq!(visual.opacity, 1.0);
assert_eq!(visual.clamped_opacity(), 1.0);
}
#[test]
fn test_visual_clamped_opacity_direct_field_out_of_range() {
let mut visual = Visual::default();
visual.opacity = -0.5;
assert_eq!(visual.clamped_opacity(), 0.0);
visual.opacity = 2.0;
assert_eq!(visual.clamped_opacity(), 1.0);
}
#[test]
fn test_visual_set_visible_true() {
let mut visual = Visual::default();
visual.set_visible(false);
assert_eq!(visual.is_visible, false);
visual.set_visible(true);
assert_eq!(visual.is_visible, true);
}
#[test]
fn test_visual_set_visible_false() {
let mut visual = Visual::default();
visual.set_visible(false);
assert_eq!(visual.is_visible, false);
}
#[test]
fn test_visual_clamped_opacity_matches_opacity_clamped() {
#[allow(deprecated)]
use wintf::ecs::layout::Opacity;
let test_values = [0.0, 0.25, 0.5, 0.75, 1.0, -0.1, 1.5, -100.0, 100.0];
for &value in &test_values {
#[allow(deprecated)]
let opacity = Opacity(value);
let visual = Visual {
opacity: value,
..Default::default()
};
assert_eq!(
opacity.clamped(),
visual.clamped_opacity(),
"Mismatch for value {}",
value
);
}
}