148 lines
5.2 KiB
Python
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"]
|