From c3dc9f8da1f0993beee1aa0abe9638de61cbdd20 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:40:03 +0000 Subject: [PATCH] test(ui): add tests for mode_toggle_system Adds comprehensive unit tests for `mode_toggle_system` inside the new `src/ui/systems_test.rs` file. This covers changing SequenceState mode (Random to Ordered and vice-versa) when pressing the button, as well as verifying correct styling behavior on hover and none interactions. Registers the module in `src/ui/mod.rs` and ensures all checks pass correctly. Co-authored-by: dynamikdev <717692+dynamikdev@users.noreply.github.com> --- src/ui/mod.rs | 2 + src/ui/systems_test.rs | 107 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/ui/systems_test.rs diff --git a/src/ui/mod.rs b/src/ui/mod.rs index f77092d..ba51e35 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -12,6 +12,8 @@ mod setup_test; #[cfg(test)] mod curriculum_test; pub mod systems; +#[cfg(test)] +mod systems_test; pub mod target; use bevy::prelude::*; diff --git a/src/ui/systems_test.rs b/src/ui/systems_test.rs new file mode 100644 index 0000000..9946fc0 --- /dev/null +++ b/src/ui/systems_test.rs @@ -0,0 +1,107 @@ +//! Tests for the UI interaction systems. + +#[cfg(test)] +mod tests { + use bevy::prelude::*; + use crate::ui::systems::mode_toggle_system; + use crate::resources::{SequenceState, SequenceMode}; + use crate::components::SequenceModeButton; + + #[test] + fn test_mode_toggle_system_random_to_ordered() { + let mut app = App::new(); + + let mut seq_state = SequenceState::default(); + seq_state.mode = SequenceMode::Random; + seq_state.current_ordered_value = 5; + app.insert_resource(seq_state); + + app.add_systems(Update, mode_toggle_system); + + let entity = app.world_mut().spawn(( + SequenceModeButton, + Interaction::Pressed, + BackgroundColor(Color::NONE), + )).id(); + let text_entity = app.world_mut().spawn(Text::new("Mode: Random")).id(); + app.world_mut().entity_mut(entity).add_child(text_entity); + + app.update(); + + let state = app.world().resource::(); + assert_eq!(state.mode, SequenceMode::Ordered, "Mode should change to Ordered."); + assert_eq!(state.current_ordered_value, 0, "Ordered value should reset to 0."); + + let text = app.world().get::(text_entity).unwrap(); + assert_eq!(text.0, "Mode: Ordered", "Text should update to Mode: Ordered."); + } + + #[test] + fn test_mode_toggle_system_ordered_to_random() { + let mut app = App::new(); + + let mut seq_state = SequenceState::default(); + seq_state.mode = SequenceMode::Ordered; + seq_state.current_ordered_value = 5; + app.insert_resource(seq_state); + + app.add_systems(Update, mode_toggle_system); + + let entity = app.world_mut().spawn(( + SequenceModeButton, + Interaction::Pressed, + BackgroundColor(Color::NONE), + )).id(); + let text_entity = app.world_mut().spawn(Text::new("Mode: Ordered")).id(); + app.world_mut().entity_mut(entity).add_child(text_entity); + + app.update(); + + let state = app.world().resource::(); + assert_eq!(state.mode, SequenceMode::Random, "Mode should change to Random."); + assert_eq!(state.current_ordered_value, 0, "Ordered value should reset to 0."); + + let text = app.world().get::(text_entity).unwrap(); + assert_eq!(text.0, "Mode: Random", "Text should update to Mode: Random."); + } + + #[test] + fn test_mode_toggle_system_hovered() { + let mut app = App::new(); + app.insert_resource(SequenceState::default()); + app.add_systems(Update, mode_toggle_system); + + let entity = app.world_mut().spawn(( + SequenceModeButton, + Interaction::Hovered, + BackgroundColor(Color::NONE), + )).id(); + let text_entity = app.world_mut().spawn(Text::new("Mode: Random")).id(); + app.world_mut().entity_mut(entity).add_child(text_entity); + + app.update(); + + let bg_color = app.world().get::(entity).unwrap(); + assert_eq!(bg_color.0, Color::srgba(0.886, 0.886, 0.886, 0.1), "Background color should be subtle gray on hover."); + } + + #[test] + fn test_mode_toggle_system_none() { + let mut app = App::new(); + app.insert_resource(SequenceState::default()); + app.add_systems(Update, mode_toggle_system); + + let entity = app.world_mut().spawn(( + SequenceModeButton, + Interaction::None, + BackgroundColor(Color::srgba(1.0, 0.0, 0.0, 1.0)), + )).id(); + let text_entity = app.world_mut().spawn(Text::new("Mode: Random")).id(); + app.world_mut().entity_mut(entity).add_child(text_entity); + + app.update(); + + let bg_color = app.world().get::(entity).unwrap(); + assert_eq!(bg_color.0, Color::NONE, "Background color should reset to NONE."); + } +}