Mi2dRPGamEng/tests/test_menu_draw.py

148 lines
5.2 KiB
Python

from collections import defaultdict
from pathlib import Path
import pytest
from engine.character import Character
from engine.character_creator import CharacterCreator
from engine.controls_menu import ControlsMenu
from engine.defs import DefRegistry
from engine.game_modes import CharacterCreationFlow, MainMenu, PauseMenu
from engine.render import menu_draw
from engine.ui import AbilityBar, AbilityBarSlot, CharacterMenu
from engine.world_creation import WorldCreationMenu
DEFS_DIR = Path(__file__).resolve().parent.parent / "resources" / "defs"
@pytest.fixture()
def registry():
return DefRegistry.load(DEFS_DIR)
def new_buckets():
return defaultdict(list)
def test_draw_main_menu_emits_a_background_panel_and_option_text():
buckets = new_buckets()
menu_draw.draw_main_menu(buckets, MainMenu(has_existing_save=True), 800, 600)
assert buckets["ui/panel/background.png"]
assert any(k.startswith("ui/font/") for k in buckets)
def test_draw_pause_menu_emits_content():
buckets = new_buckets()
menu_draw.draw_pause_menu(buckets, PauseMenu(), 800, 600)
assert buckets["ui/panel/background.png"]
def test_draw_character_creation_species_step(registry):
buckets = new_buckets()
flow = CharacterCreationFlow(CharacterCreator(registry))
menu_draw.draw_character_creation(buckets, flow, 800, 600)
assert buckets["ui/panel/background.png"]
def test_draw_character_creation_name_step(registry):
buckets = new_buckets()
flow = CharacterCreationFlow(CharacterCreator(registry))
flow.advance()
flow.type_char("V")
menu_draw.draw_character_creation(buckets, flow, 800, 600)
assert buckets["ui/panel/background.png"]
def test_draw_world_creation_lists_templates_and_highlights_selection():
buckets = new_buckets()
menu = WorldCreationMenu()
menu.select(0)
menu_draw.draw_world_creation(buckets, menu, 800, 600)
assert buckets["ui/panel/background.png"]
assert buckets["ui/panel/highlight.png"]
assert any(k.startswith("ui/font/") for k in buckets)
def test_draw_world_creation_with_nothing_selected_defaults_to_first_row():
buckets = new_buckets()
menu_draw.draw_world_creation(buckets, WorldCreationMenu(), 800, 600)
assert buckets["ui/panel/highlight.png"]
def test_draw_controls_menu_highlights_selected_row():
buckets = new_buckets()
from engine.config import KeyBindings
menu = ControlsMenu(KeyBindings.load(Path("/nonexistent")))
menu_draw.draw_controls_menu(buckets, menu, 800, 600)
assert buckets["ui/panel/highlight.png"]
def test_draw_ability_bar_highlights_the_selected_slot():
buckets = new_buckets()
bar = AbilityBar()
bar.assign(2, AbilityBarSlot(kind="hand", source_id="right_hand", ability_id="time_warp_sphere"))
bar.select(2)
menu_draw.draw_ability_bar(buckets, bar, 600)
assert buckets["ui/panel/highlight.png"]
assert buckets["ui/panel/border.png"]
assert any(k.startswith("ui/font/") for k in buckets)
def test_draw_ability_bar_with_nothing_selected_has_no_highlight():
buckets = new_buckets()
menu_draw.draw_ability_bar(buckets, AbilityBar(), 600)
assert "ui/panel/highlight.png" not in buckets
assert buckets["ui/panel/border.png"]
def test_draw_character_card_bio_tab(registry):
buckets = new_buckets()
character = Character(
name="Vex", species_id="human", default_body_parts=registry.new_default_body_parts("human")
)
menu_draw.draw_character_card(buckets, character, CharacterMenu(), registry, 600)
assert buckets["ui/panel/background.png"]
assert any(k.startswith("ui/font/") for k in buckets)
def test_draw_character_card_equipment_tab(registry):
buckets = new_buckets()
character = Character(
name="Vex", species_id="human", default_body_parts=registry.new_default_body_parts("human")
)
card_menu = CharacterMenu()
card_menu.select_tab("equipment")
menu_draw.draw_character_card(buckets, character, card_menu, registry, 600)
assert buckets["ui/panel/background.png"]
def test_draw_character_card_medical_tab_lists_body_parts_and_organs(registry):
buckets = new_buckets()
character = Character(
name="Vex", species_id="human", default_body_parts=registry.new_default_body_parts("human")
)
card_menu = CharacterMenu()
card_menu.select_tab("medical")
menu_draw.draw_character_card(buckets, character, card_menu, registry, 600)
assert buckets["ui/panel/background.png"]
assert any(k.startswith("ui/font/") for k in buckets)
def test_draw_character_card_medical_tab_shows_removed_parts_and_ailments(registry):
from engine.character import Ailment
buckets = new_buckets()
character = Character(
name="Vex", species_id="human", default_body_parts=registry.new_default_body_parts("human")
)
torso = character.get_or_create_body_part_override("torso")
torso.ailments.append(Ailment(id="infection", name="Infection", severity=0.5))
leg = character.get_or_create_body_part_override("left_leg")
leg.removed = True
card_menu = CharacterMenu()
card_menu.select_tab("medical")
menu_draw.draw_character_card(buckets, character, card_menu, registry, 600)
assert buckets["ui/panel/background.png"]