Repository navigation
Menus Test Plan
Luke Strader edited this page Sep 16, 2026
·
1 revision
Manual/visual test cases for UI work that JUnit can't meaningfully assert on (layout, animation, colour, texture swap-in). Covers: Main Menu, Pause Menu, HUD (health bar + hotbar), Backpack, and the Game End screen.
Setup: run ./gradlew desktop:run from source/.
| ID | Steps | Expected Result |
|---|---|---|
| SM-1 | Launch the game. | Main menu loads with the Odysseus logo, a background image, and 5 buttons: Play and Continue in a left column, Minigames and Settings in a right column, Exit centred at the bottom. |
| SM-2 | Click the "Settings" button. | The background changes to a similar image without the foreground elements. The settings menu contains a box with the heading "SETTINGS" and has options to change the FPS cap, fullscreen & window size, Vsync, UI scale, and resolution. |
| SM-3 | Interact with the "Resolution" dropdown menu | When clicked, the menu displays a dropdown of different screen resolutions, and on selecting one the resolution changes appropriately, with the background image and UI elements matching the new resolution. |
| SM-4 | Click "Fullscreen". | The window resizes again, this time to fullscreen, and the background and UI elements resize accordingly. |
| SM-5 | Click Exit. | The game returns to the main menu and remains in fullscreen. |
| ID | Steps | Expected Result |
|---|---|---|
| PM-1 | From the main menu, click "Play" and click through any cutscenes. Once in the game, press the ESC key. | The game pauses (player and enemies stop moving), and a menu appears with "Resume", "Settings", "Controls" and Exit buttons, with the game behind the menu being blurred. |
| PM-2 | Click "Resume" | The menu closes and gameplay resumes as normal, with player and enemies being able to move. |
| PM-3 | Repeat steps 1 & 2, but close the menu using ESC instead of clicking "Resume". | Gameplay pauses as in step PM-1 when ESC is pressed for the first time, and then resumes as in step PM- 2 when ESC is pressed again |
| PM-4 | Re-open the pause menu, click ** | |
| Controls**. | A graphic showing the control scheme appears, with a Back button. | |
| PM-5 | Click Back on the controls graphic. | Returns to the normal pause menu (Resume/Settings/Controls/Exit), still paused/blurred. |
| PM-6 | Click Settings from pause. | Settings screen opens; exiting it returns to the paused game (not the main menu). |
| PM-7 | Click Exit from pause. | Returns to the main menu. |
| ID | Steps | Expected Result |
|---|---|---|
| HB-1 | Start a game and observe the top-left HUD. | A row of hearts is shown over a health-bar background image, aligned with no gaps/overlaps between hearts. |
| HB-2 | Take damage (fight an enemy or use the debug terminal — see GE-1 below for how to force state changes). | Hearts update to reflect lost health (full → damaged → empty/last-health art) in real time. |
| HB-3 | Reduce health to exactly 1 heart remaining. | The "last health" heart art is shown distinctly (different from a normal full heart) as a low-health warning. |
| HB-4 | Heal back up (potion/full heal, if available). | Hearts refill correctly, no leftover damaged/empty heart art from before. |
| ID | Steps | Expected Result |
|---|---|---|
| IB-1 | Start a game and look at the bottom hotbar. | A row of slots is shown, each drawn as a rounded box (dark teal-green fill, dark border) — not an image-based slot. |
| IB-2 | Press number keys 1–9. | The slot matching the pressed number gets a visibly different border colour (brown) while all other slots keep the normal dark border — only one slot selected at a time. |
| IB-3 | Pick up an item. | It appears in the next open hotbar slot with its icon and a quantity label if stackable. |
| IB-4 | Press . / ,. |
Selection moves to the next/previous slot (border highlight moves accordingly). |
| IB-5 | Select an empty slot. | Slot still renders the rounded-box style (no broken/missing texture) with the selected border colour, just no item icon inside. |
| ID | Steps | Expected Result |
|---|---|---|
| BP-1 | Press B. | Backpack panel opens, styled to match the hotbar's rounded-box slots. |
| BP-2 | Press B again. | Backpack closes. |
| BP-3 | Click-and-drag an item from the backpack onto a hotbar slot. | A drag icon follows the cursor during the drag; releasing over a hotbar slot moves the item there and it disappears from its old backpack slot. |
| BP-4 | Drag an item and release it somewhere invalid (outside any slot). | Item returns to its original slot — nothing is lost or duplicated. |
Shortcut for testing without a full playthrough: press F1 to open the debug terminal, type win or lose, press Enter — this fires the same event a real win/death would.
| ID | Steps | Expected Result |
|---|---|---|
| GE-1 | Trigger lose via the terminal (or die in-game). |
A panel appears over gameplay: title "GAME OVER!", a message that types out letter-by-letter (typewriter effect), and 3 buttons: Restart, Main Menu, Exit Game. |
| GE-2 | Trigger win via the terminal (or complete the level). |
Same panel, title "YOU WIN!", victory message. |
| GE-3 | Look at the 3 buttons' size relative to the panel. | Each button is a reasonably sized rectangle (roughly 200×70px) — not stretched to fill/overflow the whole panel or screen. |
| GE-4 | Click each of the 3 buttons in turn (re-trigger lose between tests). |
Restart: logged as requested (no crash — full reset isn't wired up yet). Main Menu: returns to the main menu. Exit Game: closes the application. |
| GE-5 | Let the typewriter finish, then check the message is fully readable and doesn't overflow/clip the panel. | Full result text visible, wrapped correctly, no cut-off text. |
- Recently fixed bugs worth double-checking regressions on: the game-over screen used to crash on death (missing texture load) and its buttons used to render full-screen-sized — both fixed; GE-1/GE-3 above specifically guard against these coming back.
- If any
getAsset(...)call throws on screen load, check that the texture path was added to that screen'screateTextures()/texture-loading array — this has been the root cause of two bugs already.
Entities and Components
Input Handling
Arrow Selection Wheel Arrow Selection Wheel — Sprint 3