Menus Test Plan - UQcsse3200/2026-studio-2 GitHub Wiki
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/.
1. Settings Menu
| 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. |
2. Pause Menu
| 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. |
3. HUD — Health Bar
| 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. |
4. HUD — Inventory Bar (Hotbar)
| 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. |
5. Backpack
| 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. |
6. Game End Screen (Win / Lose)
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. |
Notes for testers
- 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's createTextures()/texture-loading array — this has been the root cause of two bugs already.