From ccd24b05efd275b4fba37701e50c83854f71e182 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 25 Jun 2026 05:41:31 +0000 Subject: [PATCH] test: Add tests for target visualization spawning - Created `src/ui/target_test.rs` to verify `spawn_target_circle`. - Added mock Bevy App testing for correct entity spawning (8 targets). - Verified `Transform`, `Text2d`, `Name`, and `NumberIndex` properties. - Updated `src/ui/mod.rs` to expose the new test module. Co-authored-by: dynamikdev <717692+dynamikdev@users.noreply.github.com> --- src/ui/mod.rs | 2 ++ src/ui/target_test.rs | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/ui/target_test.rs diff --git a/src/ui/mod.rs b/src/ui/mod.rs index f77092d..1e30fc8 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -13,6 +13,8 @@ mod setup_test; mod curriculum_test; pub mod systems; pub mod target; +#[cfg(test)] +mod target_test; use bevy::prelude::*; use bevy_ui_widgets::SliderPlugin; diff --git a/src/ui/target_test.rs b/src/ui/target_test.rs new file mode 100644 index 0000000..3cb10f3 --- /dev/null +++ b/src/ui/target_test.rs @@ -0,0 +1,45 @@ +//! Tests for the target visualization logic. + +#[cfg(test)] +mod tests { + use bevy::prelude::*; + use std::f32::consts::PI; + use crate::ui::target::spawn_target_circle; + use crate::components::NumberIndex; + use crate::constants::{CIRCLE_RADIUS, LABELS}; + use crate::resources::Typography; + + fn test_setup_system(mut commands: Commands, typography: Res) { + spawn_target_circle(&mut commands, &typography); + } + + #[test] + fn test_spawn_target_circle() { + let mut app = App::new(); + app.add_plugins(MinimalPlugins); + app.add_plugins(bevy::asset::AssetPlugin::default()); + app.insert_resource(Typography::default()); + app.add_systems(Startup, test_setup_system); + app.update(); + + let mut query = app.world_mut().query::<(&NumberIndex, &Transform, &Text2d, &Name)>(); + let count = query.iter(app.world()).count(); + assert_eq!(count, 8, "Expected 8 target entities to be spawned"); + + for (index, transform, text, name) in query.iter(app.world()) { + let i = index.0; + let expected_label = LABELS[i as usize]; + + assert_eq!(text.0, format!("{}", expected_label)); + assert_eq!(name.as_str(), format!("Target {}", expected_label)); + + let angle = PI / 2.0 - (i as f32) * (PI / 4.0); + let expected_x = angle.cos() * CIRCLE_RADIUS; + let expected_y = angle.sin() * CIRCLE_RADIUS; + + assert!((transform.translation.x - expected_x).abs() < 0.001); + assert!((transform.translation.y - expected_y).abs() < 0.001); + assert_eq!(transform.translation.z, 1.0); + } + } +}