From a098ea9fd92214a752cdc6009c6dde81c7558bb1 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 14:00:31 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20Add=20unit=20tests=20for=20`curr?= =?UTF-8?q?iculum=5Fpage=5Fbutton=5Fsystem`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: dynamikdev <717692+dynamikdev@users.noreply.github.com> --- src/ui/mod.rs | 2 ++ src/ui/systems_test.rs | 73 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 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..347db39 --- /dev/null +++ b/src/ui/systems_test.rs @@ -0,0 +1,73 @@ +use bevy::prelude::*; +use crate::components::{CurriculumPrevPageButton, CurriculumNextPageButton}; +use crate::resources::CurriculumState; +use super::systems::curriculum_page_button_system; + +fn setup_app(is_visible: bool, pages_count: usize, current_page: usize) -> App { + let mut app = App::new(); + app.add_plugins(bevy::prelude::TaskPoolPlugin::default()); + + let mut state = CurriculumState::default(); + state.is_visible = is_visible; + state.current_page = current_page; + for _ in 0..pages_count { + state.pages.push(Handle::default()); + } + app.insert_resource(state); + app.add_systems(Update, curriculum_page_button_system); + app +} + +#[test] +fn test_hidden_or_empty_no_effect() { + let mut app = setup_app(false, 2, 0); // hidden + app.world_mut().spawn((Interaction::Pressed, CurriculumNextPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 0); + + let mut app = setup_app(true, 0, 0); // empty + app.world_mut().spawn((Interaction::Pressed, CurriculumNextPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 0); +} + +#[test] +fn test_prev_button_decrements() { + let mut app = setup_app(true, 3, 1); + app.world_mut().spawn((Interaction::Pressed, CurriculumPrevPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 0); +} + +#[test] +fn test_prev_button_at_zero() { + let mut app = setup_app(true, 3, 0); + app.world_mut().spawn((Interaction::Pressed, CurriculumPrevPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 0); +} + +#[test] +fn test_next_button_increments() { + let mut app = setup_app(true, 3, 1); + app.world_mut().spawn((Interaction::Pressed, CurriculumNextPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 2); +} + +#[test] +fn test_next_button_at_max() { + let mut app = setup_app(true, 3, 2); + app.world_mut().spawn((Interaction::Pressed, CurriculumNextPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 2); +} + +#[test] +fn test_ignore_hover_none() { + let mut app = setup_app(true, 3, 1); + app.world_mut().spawn((Interaction::Hovered, CurriculumNextPageButton)); + app.world_mut().spawn((Interaction::None, CurriculumPrevPageButton)); + app.update(); + assert_eq!(app.world().resource::().current_page, 1); +}