use bevy_ecs::prelude::*;
use windows::core::Result;
use wintf::ecs::{Visual, VisualGraphics, Window, visual_property_sync_system};
use super::common::{WucVisualFactory, setup_graphics};
fn run_sync(world: &mut World) {
let mut schedule = Schedule::default();
schedule.add_systems(visual_property_sync_system);
schedule.run(world);
}
fn setup() -> Result<(World, WucVisualFactory)> {
let graphics = setup_graphics()?;
let factory = WucVisualFactory::new(&graphics)?;
let mut world = World::new();
world.insert_resource(graphics);
Ok((world, factory))
}
#[test]
fn syncs_offset_and_opacity_for_non_window_entity() -> Result<()> {
let (mut world, factory) = setup()?;
let visual = factory.create_visual()?;
world.spawn((
Visual {
opacity: 0.5,
..Default::default()
},
VisualGraphics::new(visual),
));
world.flush();
run_sync(&mut world);
Ok(())
}
#[test]
fn skips_entity_with_invalid_visual_graphics() -> Result<()> {
let (mut world, _factory) = setup()?;
world.spawn((Visual::default(), VisualGraphics::default()));
world.flush();
run_sync(&mut world);
Ok(())
}
#[test]
fn window_entity_skips_offset_branch() -> Result<()> {
let (mut world, factory) = setup()?;
let visual = factory.create_visual()?;
world.spawn((
Window::default(),
Visual::default(),
VisualGraphics::new(visual),
));
world.flush();
run_sync(&mut world);
Ok(())
}
#[test]
fn invisible_visual_takes_zero_opacity_branch() -> Result<()> {
let (mut world, factory) = setup()?;
let visual = factory.create_visual()?;
world.spawn((
Visual {
is_visible: false,
opacity: 1.0,
..Default::default()
},
VisualGraphics::new(visual),
));
world.flush();
run_sync(&mut world);
Ok(())
}
#[test]
fn out_of_range_opacity_is_clamped_before_set() -> Result<()> {
let (mut world, factory) = setup()?;
let visual = factory.create_visual()?;
world.spawn((
Visual {
opacity: 5.0, ..Default::default()
},
VisualGraphics::new(visual),
));
world.flush();
run_sync(&mut world);
Ok(())
}